Как найти разрывы временных интервалов в таблице базы данных SQLite3 - PullRequest
0 голосов
/ 26 мая 2020

У меня есть база данных SQLite3 с одной таблицей вроде этой:
Time Val1 Val2 Val3
10:12:03 3.4 4.3 5
10:12:04 3.2 4.1 6
10:12:05 3.3 4.6 5
11:03:19 2.4 5.7 4
11:03:20 2.5 5.2 4
11:03:21 2.7 5.9 5
...

Временной диапазон между двумя строками более 1 секунды означает конец первого рабочего интервала и начало второго рабочего интервала.
Итак, первый рабочий интервал 10:12:03 - 10:12:05
, второй рабочий интервал 11:03:19 - 11:03:21
и так далее.

Как я могу узнать все временные метки, где начинаются интервалы (10:12:03, 11:03:19 ...) с использованием SQL?

1 Ответ

0 голосов
/ 26 мая 2020

Это проблема с пробелами и островками: вы хотите отображать строки, не смежные с предыдущей (то есть начало каждого острова).

Вот подход с использованием оконных функций:

select t.*
from (
    select 
        t.*,
        lag(time) over(order by time) lag_time
        from mytable t
) t
where
    lag_time is null
    or time >  datetime(lag_time, '+ 1 second')

lag() возвращает time в предыдущей строке. Затем мы фильтруем строки, которые имеют разницу более одной секунды с предыдущей строкой (или для которых нет предыдущей записи).

...