我有一个简单的桌子,可存储各个城市的日常高温。该表包含3个字段:city_id
,date
,high_temp
。 (唯一的是city_id和日期的组合)
我正在寻找一个有效的SQL Server查询,这将允许我拉出每个城市最近的3个高点。因此,结果将包括列出的每个城市ID 3次。
对于每个城市而言,每天都没有记录高温,因此我无法按(getdate()-1
,getdate()-2
等过滤{1}},> p>
有没有办法在没有循环功能的情况下执行此操作?非常感激。欢呼声。
答案 0 :(得分:1)
对于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
答案 1 :(得分:1)
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)