Согласно определению: Функция LAST_VALUE () - это оконная функция, которая возвращает последнее значение в упорядоченном разделе набора результатов.
Так что в моем примере мне нужно получить последняя дата ExpirationDate, основанная на QuoteID.
Использование FIRST_VALUE()
в порядке QuoteID DESC
дает правильный результат.
Так что я ожидаю, что использование LAST_VALUE()
, заказанное QuoteID ASC
, должно привести к тому же результату.
Однако это дает мне неверный результат.
Я что-то упустил?
DECLARE @Table TABLE ( QuoteID int, PolicyNumber varchar(100), ExpirationDate date)
INSERT INTO @Table
(
QuoteID,
PolicyNumber,
ExpirationDate
)
VALUES
(
1, -- QuoteID - int
'Pol1', -- PolicyNumber - varchar
'2019-05-01' -- ExpirationDate - date
),
(
2, -- QuoteID - int
'Pol1', -- PolicyNumber - varchar
'2018-05-01' -- ExpirationDate - date
)
SELECT QuoteID, [@Table].ExpirationDate ,[@Table].PolicyNumber
,CAST(FIRST_VALUE(ExpirationDate) OVER (PARTITION BY PolicyNumber ORDER BY QuoteID DESC) AS DATE) as FIRST_VALUE_ExpirationDate --Correct
,CAST(LAST_VALUE(ExpirationDate) OVER (PARTITION BY PolicyNumber ORDER BY QuoteID ) AS DATE) as LAST_VALUE_ExpirationDate --Gives Incorrect
FROM @Table
ORDER BY QuoteID