2014-01-10 3 views
1

여러 도시의 일일 고온을 저장하는 간단한 테이블이 있습니다. 표에는 city_id, date, high_temp의 3 개의 입력란이 있습니다. (유니크는 city_id와 날짜의 콤보입니다.)SQL Server의 여러 항목에 대한 마지막 레코드 얻기

각 도시에 대해 가장 최근에 고가 3 개를 가져올 수있는 SQL Server에 대한 효율적인 쿼리를 찾고 있습니다. 따라서 결과에는 3 번 나열된 모든 도시 ID가 포함됩니다. 도전 여분 무엇

는 (나를 위해 적어도) 높은 임시 직원이 방법에 거기에 모든 도시에 매일 내가 (getdate()-1, getdate()-2 등)

에 의해 필터링 할 수 없습니다 기록되지 않은 것입니다 루프 기능없이 이것을 할 수 있을까요? 매우 감사. 건배.

+0

SQL 서버의 버전은 무엇? –

+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 Stanley의 답변보다 빠르다는 것을 나는 모른다. 그러나 나는 SQL 서버에 익숙하지 않기 때문에 더 읽기 쉽습니다. –

관련 문제