2014-01-10 78 views
1

我有一個簡單的表,用於存儲每日高溫對各個城市。該表包含3個字段:city_iddate,high_temp。 (獨特的是city_id和日期的組合)獲取多個項目最後一個記錄在SQL Server

我正在尋找一個SQL Server中有效的查詢,讓我拉3個最近期高點爲每個城市。因此,結果將包括每個城市id列出3次。

什麼是額外的挑戰(至少對我來說)是高臨時工不記錄每一天的每一個城市,所以我不能用(getdate()-1getdate()-2等)

過濾器是有辦法這樣做沒有循環功能?非常感激。乾杯。

+0

什麼版本的SQL Server? –

+0

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

回答

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
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。 –

相關問題