Я использую postgresql и функцию задержки, чтобы получить предыдущие 2 значения. У меня есть таблица, в которой мне нужно выбрать предыдущие 2 строки, где 'exclude' = 0. Поэтому я не могу использовать строки для лага, где exclude = 1
Вот тестовая установка
with tmp(time,value,exclude)
as (values
('2020-08-05 13:00:00.000',23.1,0),
('2020-08-05 14:00:00.000',22.33,0),
('2020-08-05 15:00:00.000',12.1,1),
('2020-08-05 16:00:00.000',31.1,0),
('2020-08-05 17:00:00.000',53.1,0),
('2020-08-05 18:00:00.000',223.1,0),
('2020-08-05 19:00:00.000',253.1,0),
('2020-08-05 20:00:00.000',2.1,0),
('2020-08-05 21:00:00.000',43.1,0),
('2020-08-05 22:00:00.000',63.1,0),
('2020-08-05 23:00:00.000',3.1,1),
('2020-08-06 00:00:00.000',973.1,1),
('2020-08-06 01:00:00.000',23.1,0),
('2020-08-06 02:00:00.000',13.1,0),
('2020-08-06 03:00:00.000',288.1,0),
('2020-08-06 04:00:00.000',254.1,0),
('2020-08-06 05:00:00.000',234.1,0),
('2020-08-06 06:00:00.000',2546.1,0),
('2020-08-06 07:00:00.000',22.1,0),
('2020-08-06 08:00:00.000',122.1,0),
('2020-08-06 09:00:00.000',14.1,0),
('2020-08-06 10:00:00.000',66.1,0),
('2020-08-06 11:00:00.000',67.1,0),
('2020-08-06 12:00:00.000',23.1,0)
)
select
"time",
"value",
lag("value",1) over (order by "time" asc) as prev1,
lag("value",2) over (order by "time" asc) as prev2,
"exclude"
from tmp;
Что в настоящее время приводит к:
time |value |prev1 |prev2 |exclude|
-----------------------|------|------|------|-------|
2020-08-05 13:00:00.000| 23.1| | | 0|
2020-08-05 14:00:00.000| 22.33| 23.1| | 0|
2020-08-05 15:00:00.000| 12.1| 22.33| 23.1| 1|
2020-08-05 16:00:00.000| 31.1| 12.1| 22.33| 0|
2020-08-05 17:00:00.000| 53.1| 31.1| 12.1| 0|
2020-08-05 18:00:00.000| 223.1| 53.1| 31.1| 0|
2020-08-05 19:00:00.000| 253.1| 223.1| 53.1| 0|
2020-08-05 20:00:00.000| 2.1| 253.1| 223.1| 0|
2020-08-05 21:00:00.000| 43.1| 2.1| 253.1| 0|
2020-08-05 22:00:00.000| 63.1| 43.1| 2.1| 0|
2020-08-05 23:00:00.000| 3.1| 63.1| 43.1| 1|
2020-08-06 00:00:00.000| 973.1| 3.1| 63.1| 1|
2020-08-06 01:00:00.000| 23.1| 973.1| 3.1| 0|
2020-08-06 02:00:00.000| 13.1| 23.1| 973.1| 0|
2020-08-06 03:00:00.000| 288.1| 13.1| 23.1| 0|
2020-08-06 04:00:00.000| 254.1| 288.1| 13.1| 0|
2020-08-06 05:00:00.000| 234.1| 254.1| 288.1| 0|
2020-08-06 06:00:00.000|2546.1| 234.1| 254.1| 0|
2020-08-06 07:00:00.000| 22.1|2546.1| 234.1| 0|
2020-08-06 08:00:00.000| 122.1| 22.1|2546.1| 0|
2020-08-06 09:00:00.000| 14.1| 122.1| 22.1| 0|
2020-08-06 10:00:00.000| 66.1| 14.1| 122.1| 0|
2020-08-06 11:00:00.000| 67.1| 66.1| 14.1| 0|
2020-08-06 12:00:00.000| 23.1| 67.1| 66.1| 0|
Мне нужно что-то вроде этого:
введите описание изображения здесь
Спасибо, Рауно