Таким образом, вам нужно что-то вроде lag
, но с условием.
Самый простой способ сделать это - использовать коррелированный подзапрос.
Сначала создайте изаполнить образец таблицы ( Пожалуйста, сохраните этот шаг в ваших будущих вопросах):
DECLARE @T AS TABLE
(
ts datetime2,
[value] int
)
INSERT INTO @T (ts, [value]) VALUES
('2019-09-22T00:00:00', 90),
('2019-09-21T23:10:05', 75),
('2019-09-21T23:09:00', 85),
('2019-09-21T22:09:00', 00),
('2019-09-21T14:09:00', 70);
Запрос:
SELECT ts,
value,
(
SELECT TOP 1 value
FROM @T T1
WHERE T0.ts > T1.ts
AND T1.value >= 5
AND T1.value <= 95
ORDER BY t1.ts DESC
) As prev_value
FROM @T T0
ORDER BY ts DESC
Результаты:
ts value prev_value
2019-09-22 00:00:00 90 75
2019-09-21 23:10:05 75 85
2019-09-21 23:09:00 85 70
2019-09-21 22:09:00 0 70
2019-09-21 14:09:00 70 NULL