Мне нужно сложить и сгруппировать последовательные целые по spoken_correctly
> 0.
Я могу выяснить, какие разделы являются последовательными, посмотрев на lag
и lead
, но затем я не уверен, как суммировать значения полей смежных групп consecutive
.
Т.е., у меня есть две группы, в которых есть последовательные spoken_correctly
значения> 0. Первая группа зеленого цвета имеет три ненулевых строки spoken_correctly
, вторая группа зеленого цвета имеет две строки.
Желаемый выход:
Этот SQL создает первое изображение над выводом:
select *, case when (q.times_spoken_correctly > 0 and (q.lag > 0 or q.lead > 0)) then 1 else 0 end as consecutive
from (
select *, lag(q.times_spoken_correctly) over (partition by q.profile_id order by q.profile_id) as lag, lead(q.times_spoken_correctly) over (partition by q.profile_id order by q.profile_id) as lead
from (
SELECT *
FROM ( VALUES (3, 0, '2019-01-15 19:15:06'),
(3, 0, '2019-01-15 19:15:07'),
(3, 1, '2019-01-15 19:16:06'),
(3, 2, '2019-01-15 19:16:10'),
(3, 2, '2019-01-15 19:17:06'),
(3, 0, '2019-01-15 19:17:11'),
(3, 0, '2019-01-15 19:39:06'),
(3, 3, '2019-01-15 19:40:10'),
(3, 4, '2019-01-15 19:40:45')
) AS baz ("profile_id", "times_spoken_correctly", "w_created_at")
) as q
) as q