sql—如何在sqlite3数据库表中查找时间间隔中断的位置

xmq68pz9  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(290)

我有一个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 等等。
如何使用sql来知道间隔开始的所有时间戳(10:12:03,11:03:19…)?

yjghlzjz

yjghlzjz1#

这是一个间隙和孤岛问题:您希望显示与前一个(即每个孤岛的开头)不相邻的行。
下面是一种使用窗口函数的方法:

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` 在前一行。然后我们对与前一行(或没有前一记录)相差大于1秒的行进行过滤。

相关问题