如何在其他行中找到具有时间值的所有行?

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

我正在尝试创建一个sql查询来收集在“c4”事件期间发生的所有事件。换句话说,我想得到在c4期间有starttime或endtime的所有行。
事件机器启动时间319:199:41c419:159:42a919:169:18b319:409:46j519:519:52g629:579:59
在上表中,我预计a3、a9和b3将被退回。
我的尝试如下,但我不知道如何区分被检查行的时间和c4行的时间。

COUNTIF(
    eventId = 'c4' 
    AND UNIX_SECONDS(startTime) > UNIX_SECONDS(startTime) 
    AND UNIX_SECONDS(endTime) < UNIX_SECONDS(endTime)) OVER (
        PARTITION BY machineId
) AS is_during_c4

感谢您的指导。

3lxsmp7m

3lxsmp7m1#

你可以用 join :

select t.*
from t join
     t tc4
     on (t.starttime between tc4.starttime and tc4.endtime or
         t.endtime between tc4.starttime and tc4.endtime
        ) and
        tc4.eventid = 'c4';

请注意,在这种情况下通常需要的是任何重叠,上面的逻辑不包括:

C4         -----XXXXXXX------
A9         --AAAAAAAAAAAA----

为此,逻辑是:

select t.*
from t join
     t tc4
     on t.starttime < =tc4.endtime and
        t.endtime >= tc4.starttime and
        tc4.eventid = 'c4';

相关问题