2013-12-14 67 views
5

我有以下查詢T-SQL:WHERE子句中OVER(PARTITION BY ... ORDER BY ...)

;WITH tmp AS 
(
    SELECT *, ROW_NUMBER() 
    OVER 
     (PARTITION BY to_tel, duration, call_date 
     ORDER BY rates_start DESC) as rn 
    FROM ##TempTable 
) 
SELECT * 
FROM tmp 
WHERE rn = 1 
ORDER BY customer_id, to_code, duration 

但我想修改它在它不給我最高rates_start,但在特定日期之前的最高rates_start。有什麼辦法可以做到這一點?

回答

12

您可以在cte部分內添加WHERE。我不知道在這種情況下你是否仍然想用call_date進行分區(我刪除了它)。如有需要,更換PARTITION BY部件。

;WITH tmp AS 
(
    SELECT *, ROW_NUMBER() 
    OVER 
     (PARTITION BY to_tel, duration 
     ORDER BY rates_start DESC) as rn 
    FROM ##TempTable 
    WHERE call_date < @somedate 
) 
SELECT * 
FROM tmp 
WHERE rn = 1 
ORDER BY customer_id, to_code, duration