Получить последние записи для нескольких элементов в SQL Server
У меня есть простая таблица, в которой ежедневно хранятся высокие температуры для разных городов. Таблица содержит 3 поля: city_id
, date
, high_temp
. (Уникальная комбинация city_id и даты)
Я ищу эффективный запрос для SQL Server, который позволит мне вытащить 3 последних максимума для каждого города. Таким образом, результат будет включать каждый идентификатор города, указанный 3 раза.
Что является дополнительным вызовом (по крайней мере для меня), так это то, что высокие темпы не записываются каждый день для каждого города, поэтому я не могу фильтровать ( getdate()-1
, getdate()-2
и т. Д.),
Есть ли способ сделать это без функции цикла? Очень признателен. Приветствия.
Для SQL 2005 и последующих используйте ROW_NUMBER
:
WITH temps as ( SELECT city_id, date, high_temp, ROW_NUMBER() OVER (PARTITION BY city_id ORDER BY date DESC) RowNum FROM TemperatureHistory <-- use the real table name here ) SELECT city_id, date, high_temp FROM temps WHERE RowNum <= 3
SELECT * FROM table T1 WHERE T1.date IN (SELECT TOP 3 date FROM table T2 WHERE T1.city_id = T2.city_id ORDER BY T2.date DESC)