获取多个项目最后一个记录在SQL Server

问题描述:

我有一个简单的表,用于存储每日高温对各个城市。该表包含3个字段:city_iddate,high_temp。 (独特的是city_id和日期的组合)获取多个项目最后一个记录在SQL Server

我正在寻找一个SQL Server中有效的查询,让我拉3个最近期高点为每个城市。因此,结果将包括每个城市id列出3次。

什么是额外的挑战(至少对我来说)是高临时工不记录每一天的每一个城市,所以我不能用(getdate()-1getdate()-2等)

过滤器是有办法这样做没有循环功能?非常感激。干杯。

+0

什么版本的SQL Server? –

+0

2012.非常感谢!很棒! – user3182880

对于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) 
+0

我不知道这是比任何d士丹利的答案更快。但是它对我来说更具可读性,因为我不像他那样熟悉SQL Server。 –