Страницы

Поиск по вопросам

четверг, 13 февраля 2020 г.

Как получить из таблиц последнюю запись по сгенерированному идентификатору?

#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 в генераторах последовательностей.

Комментариев нет:

Отправить комментарий