T-SQL:OVER中的WHERE子句(PARTITION BY ... ORDER BY ...)

S L*_*S L 8 t-sql sql-server

我有以下查询

;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
Run Code Online (Sandbox Code Playgroud)

但我想修改它不会给我最大的rates_start,但是在某个日期之前的最大rate_start.有什么方法可以做到这一点吗?

Szy*_*mon 17

您可以WHERE在cte部分内添加.我不确定你是否还想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
Run Code Online (Sandbox Code Playgroud)