И страхотна глава Въздействие върху функциите на прозорците :
Да предположим, че имате:
CREATE TABLE Test (Id INT); INSERT INTO Test VALUES ( 1001 ), ( 1002 );SELECT IdFROM TestWHERE Id =1002 AND ROW_NUMBER() OVER(ORDER BY Id) =1;
Случай 1:
Ако ( Id =1002 ) е първо, тогава ако ( ROW_NUMBER() OVER(ORDER BY Id) =1 )
Резултат:1002
Случай 2:
Ако ( ROW_NUMBER() OVER(ORDER BY Id) =1), тогава проверете дали ( Id =1002)
Резултат:празен
За да получите това, което искате, можете да обвиете прозоречна функция с CTE/subquery
като в отговор на Гордън
:
;WITH cte AS( SELECT t.*, MAX(AVG) OVER (PARTITION BY city) AS average FROM avgTemperatures t)SELECT *FROM ctewhere average> 19ORDER BY id;
Изход:
<предварителен код>╔═════╦══════════╦═════╦═════════╗║ id ║ град ║ ║ ср. ║ ═════╬══════════╬═════╬═════════╣║ 1 ║ New-York ║ 20 Y║k ║ 20 ║ 3 ║ 19 ║ 6 ║║ 3 ║ New York ║ 15 ║ 12 ║║ 4 ║ New York ║ 15 ║ 24 ║║ 11 ║ Маями ║ 28 ║ 1 ║║ 12 ║ Маями ║ 25 ║ 4 ║║ 13 ║ Маями ║ 21 ║ 12 ║║ 14 ║ Маями ║ 22 ║ 15 ║║ 15 ║ Маями ║ 20 ║ 24 ║╚═════╩══════════╩═════╩════ ═════╝