#sql #oracle #oracle11g
Как получить самую последнюю запись из таблицы? Например, в таблице есть такие идентификаторы: 1 2 7 3 10 5 Последняя запись здесь с идентификатором 10. Из известных составляющих выражения - это имя таблицы. При этом подразумеваем, что поиск нужен по первому столбцу который Primary Key и хранит идентификаторы. Иденитификатор для каждой таблицы создается триггером, который при вставке записи формирует Id для этой записи. Имена колонок с идентификатором отличаются и заранее неизвестны, поэтому запрос вообще не должен быть привязан к именам колонок. Идентификаторы создаются последовательностями, где только CYCLE_FLAG=N. Вот что я использую (меняю только имя таблицы): select a.* from ( select rownum rnum, MESSAGES.* from MESSAGES ) a where rnum=(select count(1) from MESSAGES); Пример работает и я получаю в ответ одну строку, которая иногда является записью с самым последним Id в таблице, а в некоторых таблицах этот запрос не выдает последнию запись, как если бы первое поле таблицы не было отсортировано по порядку.
Ответы
Ответ 1
Если только первая колонка содержит идентификатор, то надо так: select t.* from table_name t order by 1 desc fetch first row only; Для версий <12.1 (опробовано на 11.2.0.4) попробуйте так: with table_name as ( select to_number (trim (column_value)) id, 'item '||rownum name from xmltable ('1,2,7,3,10,5') ) -- здесь начинается запрос select * from ( select t.* from table_name t order by 1 desc ) where rownum = 1; Результат: ID NAME ---------- ----------- 10 item 5 PS Убедитесь, что используется опция NOCYCLE в генераторах последовательностей.
Комментариев нет:
Отправить комментарий