Что вам действительно нужно для этого, так это LAG(IGNORE NULLS)
, но SQL Server не поддерживает это.
Вы можете использовать другой прием, который заключается в получении максимальной даты, когда статус равен 0, и максимальной даты.где статус не 0 и сравните их.Итак:
select t.*,
(case when statuscode = 0 then 'TRUE'
when statuscode <> 0 then 'FALSE'
when (max(case when statuscode = 0 then day end) over (order by day) >
coalesce(max(case when statuscode <> 0 day date end) over (order by day), '2000-01-01')
)
then 'TRUE'
else 'FALSE'
end) as status
from t;
Здесь - это дБ <> скрипка.
Вы можете упростить это до последних условий:
select t.*,
(case when (max(case when statuscode = 0 then day end) over (order by day) >
coalesce(max(case when statuscode <> 0 then day end) over (order by day), '2000-01-01')
)
then 'TRUE'
else 'FALSE'
end) as status
from t;
Первая версия лучше соответствует логике, которую вы описываете.
Я не могу сказать из вопроса, хотите ли вы основывать логику на runningspeed
или statuscode
.Логика была бы очень похожа на runningspeed
.