PostgreSQL Выбор самой последней записи для данного идентификатора

Вопрос:Таблица По существу выглядит: Последовательный идентификатор, идентификатор, дата, данные, данные, данные и т.д. Для одного и того же идентификатора может быть несколько строк. Я хотел бы создать представление этой таблицы, которое будет использоваться в отчетах, которые показывают только самую последнюю запись для каждого идентификатора. Он должен показывать все столбцы. Может кто-нибудь помочь мне с выбором

Вопрос:

Таблица По существу выглядит:

Последовательный идентификатор, идентификатор, дата, данные, данные, данные и т.д.

Для одного и того же идентификатора может быть несколько строк. Я хотел бы создать представление этой таблицы, которое будет использоваться в отчетах, которые показывают только самую последнюю запись для каждого идентификатора. Он должен показывать все столбцы.

Может кто-нибудь помочь мне с выбором SQL? спасибо.

Лучший ответ:

Здесь около 5 различных способов сделать это, но вот один из них:

SELECT * FROM yourTable AS T1 WHERE NOT EXISTS( SELECT * FROM yourTable AS T2 WHERE T2.ID = T1.ID AND T2.Date > T1.Date )

И вот еще:

SELECT T1.* FROM yourTable AS T1 LEFT JOIN yourTable AS T2 ON ( T2.ID = T1.ID AND T2.Date > T1.Date ) WHERE T2.ID IS NULL

Еще одно:

WITH T AS ( SELECT *, ROW_NUMBER() OVER(PARTITION BY ID ORDER BY Date DESC) AS rn FROM yourTable ) SELECT * FROM T WHERE rn = 1

Хорошо, я увлекся, вот последний, который я выложу (пока):

WITH T AS ( SELECT ID, MAX(Date) AS latest_date FROM yourTable GROUP BY ID ) SELECT yourTable.* FROM yourTable JOIN T ON T.ID = yourTable.ID AND T.latest_date = yourTable.Date Ответ №1

Это кажется хорошим использованием для коррелированных подзапросов:

CREATE VIEW your_view AS SELECT * FROM your_table a WHERE date = ( SELECT MAX(date) FROM your_table b WHERE b.id = a.id )

В столбце “Дата” необходимо однозначно идентифицировать каждую строку (например, тип TIMESTAMP).

Оцените статью
Добавить комментарий