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