У меня есть следующие данные
create table test.my_table
(
date date,
daily_cumulative_precip real
);
INSERT INTO test.my_table (date, daily_cumulative_precip) VALUES ('2016-07-11', 0.508);
INSERT INTO test.my_table (date, daily_cumulative_precip) VALUES ('2016-07-12', 0);
INSERT INTO test.my_table (date, daily_cumulative_precip) VALUES ('2016-07-13', 0);
INSERT INTO test.my_table (date, daily_cumulative_precip) VALUES ('2016-07-14', 2.032);
INSERT INTO test.my_table (date, daily_cumulative_precip) VALUES ('2016-07-15', 0);
INSERT INTO test.my_table (date, daily_cumulative_precip) VALUES ('2016-07-16', 0);
INSERT INTO test.my_table (date, daily_cumulative_precip) VALUES ('2016-07-17', 21.842);
INSERT INTO test.my_table (date, daily_cumulative_precip) VALUES ('2016-07-18', 0);
INSERT INTO test.my_table (date, daily_cumulative_precip) VALUES ('2016-07-19', 0);
INSERT INTO test.my_table (date, daily_cumulative_precip) VALUES ('2016-07-20', 0);
Я хотел бы создать и назначить значения в новом столбце с именем «delta» на основе daily_cumulative_precip
.Я хотел бы иметь delta = 0
, когда daily_cumulative_precip > 0
, delta = 1
, когда daily_cumulative_precip = 0
в этот день и предыдущий день, delta = 2
, когда daily_cumulative_precip = 0
в этот день и предыдущие 1 дни, и delta = 3
, когда daily_cumulative_precip = 0
в этот день и в предыдущие 2 дня.Для этого конкретного набора данных delta
должно быть
0, 1, 2, 0, 1, 2, 0, 1, 2, 3
У меня есть следующее, но оно не дает желаемого результата
SELECT *,
CASE
WHEN daily_cumulative_precip > 0 THEN 0
--ELSE date - first_value(date) OVER (ORDER BY date)
ELSE date - lag(date) OVER (ORDER BY date)
END AS delta
FROM "test".my_table
ORDER BY date;
Я очень ценю вашу помощь.