获取多个项目最后一个记录在SQL Server
问题描述:
我有一个简单的表,用于存储每日高温对各个城市。该表包含3个字段:city_id
,date
,high_temp
。 (独特的是city_id和日期的组合)获取多个项目最后一个记录在SQL Server
我正在寻找一个SQL Server中有效的查询,让我拉3个最近期高点为每个城市。因此,结果将包括每个城市id列出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)
+0
我不知道这是比任何d士丹利的答案更快。但是它对我来说更具可读性,因为我不像他那样熟悉SQL Server。 –
什么版本的SQL Server? –
2012.非常感谢!很棒! – user3182880