获取SQL Server中多个项目的上次记录

时间:2014-01-10 18:15:26

标签: sql sql-server

我有一个简单的桌子,可存储各个城市的日常高温。该表包含3个字段:city_iddatehigh_temp。 (唯一的是city_id和日期的组合)

我正在寻找一个有效的SQL Server查询,这将允许我拉出每个城市最近的3个高点。因此,结果将包括列出的每个城市ID 3次。

对于每个城市而言,每天都没有记录高温,因此我无法按(getdate()-1getdate()-2等过滤 p>

有没有办法在没有循环功能的情况下执行此操作?非常感激。欢呼声。

2 个答案:

答案 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)