2013-12-14 21 views
5

は、私は次のクエリT-SQL:OVER句で(BY ... ... BY ORDER PARTITION)

;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

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 
関連する問題