Получить последние записи для нескольких элементов в 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) 
Давайте будем гением компьютера.