在同一时间段sqlite中选择值

bd1hkmkf  于 2023-01-09  发布在  SQLite
关注(0)|答案(2)|浏览(205)

考虑表事件

Date         Time         Duration        Event
1-1-2023     20:28:00     95              A
1-1-2023     20:29:00     60              B
1-1-2023     20:29:55     10              C
1-1-2023     21:12:00     2               D
...

现在,我想获取在同一时间段内发生的条目,例如,活动A发生在20:28:00到20:29:35之间,活动B发生在20:29:00到20:30:00之间
因此,事件A和B共有35秒,B和C共有5秒。
我想得到所有的事件在共同的时间段,是它可能到使用只是sql查询?

wd2eg0qa

wd2eg0qa1#

假设您的日期采用正确的ISO格式YYYY-MM-DD,则可以使用自联接:

SELECT *
FROM events e1 INNER JOIN events e2
ON e2.event > e1.event
AND datetime(e2.date || ' ' || e2.time, e2.duration || ' second') > e1.date || ' ' || e1.time
AND e2.date || ' ' || e2.time < datetime(e1.date || ' ' || e1.time, e1.duration || ' second');

请参见demo

2admgd59

2admgd592#

也许吧假设你有日期时间索引

SELECT *
FROM events e1 INNER JOIN events e2
ON  datetime(e2.date || ' ' || e2.time) 
    BETWEEN (e1.date || ' ' || e1.time)
       AND datetime(e1.date || ' ' || e1.time, e1.duration || ' second')
WHERE e2.event <> e1.event;

正如@forpas所说,如果您将日期和时间值保存在一个列中,并在该列上建立索引,性能会更好

相关问题