2013-12-14 4 views
5

У меня есть следующий запросT-SQL: ИНЕКЕ в 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 

Но я хотел бы изменить его, где он не дать мне максимальный rate_start, но максимальный rate_start до определенной даты. Есть ли способ сделать это?

ответ

12

Вы можете добавить WHERE внутри cte part. Я не уверен, если вы все еще хотите разбить на 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 
Смежные вопросы