获取SQL Server中多个项目的最后记录

获取SQL Server中多个项目的最后记录,sql,sql-server,Sql,Sql Server,我有一个简单的表,可以存储各个城市每天的高温。该表包含3个字段:城市id、日期、高温。唯一是城市id和日期的组合 我正在寻找一个高效的SQL Server查询,它将允许我为每个城市创造3个最近的高点。因此,结果将包括列出3次的每个城市id 对我来说,更具挑战性的是,并不是每个城市每天都会记录高温,所以我无法通过getdate-1、getdate-2等进行过滤 有没有一种不用循环函数就可以实现的方法?非常感谢。干杯。对于SQL 2005及更高版本,请使用: 什么版本的SQL Server?2012

我有一个简单的表,可以存储各个城市每天的高温。该表包含3个字段:城市id、日期、高温。唯一是城市id和日期的组合

我正在寻找一个高效的SQL Server查询,它将允许我为每个城市创造3个最近的高点。因此,结果将包括列出3次的每个城市id

对我来说,更具挑战性的是,并不是每个城市每天都会记录高温,所以我无法通过getdate-1、getdate-2等进行过滤


有没有一种不用循环函数就可以实现的方法?非常感谢。干杯。

对于SQL 2005及更高版本,请使用:


什么版本的SQL Server?2012。非常感谢你!很好!我不知道这是否比D·斯坦利的答案快。但对我来说更容易理解,因为我不像他那样熟悉SQL Server。
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)