mysql事件记录结束时间_mysql-开始和结束之间的时间的SQL Join表

这有点笨拙,但这是我想出的:

SELECT

*

FROM

(

SELECT

a.ID AS EventID,

b.ID AS VideoID,

b.Filename,

(

CASE

WHEN a.Time < b.StartTime THEN UNIX_TIMESTAMP(b.StartTime) - UNIX_TIMESTAMP(a.Time)

WHEN a.Time > b.EndTime THEN UNIX_TIMESTAMP(a.Time) - UNIX_TIMESTAMP(b.EndTime)

END

) AS distance_factor

FROM

`Events` a

CROSS JOIN

video b

WHERE

NOT EXISTS

(

SELECT NULL

FROM Video

WHERE a.Time BETWEEN StartTime AND EndTime

)

) c

WHERE

c.distance_factor =

(

SELECT

MIN(CASE WHEN d.Time < e.StartTime THEN UNIX_TIMESTAMP(e.StartTime) - UNIX_TIMESTAMP(d.Time) WHEN d.Time > e.EndTime THEN UNIX_TIMESTAMP(d.Time) - UNIX_TIMESTAMP(e.EndTime) END)

FROM

`Events` d

CROSS JOIN

video e

WHERE d.ID = c.EventID

)

GROUP BY

c.EventID

这会返回事件的日期不在任何视频的任何时间范围内的事件,但是会返回距离该事件日期最近的视频.

现在唯一的一件事就是有些视频的秒差完全一样.我不知道您是否希望它返回2行,但是现在,我将GROUP BY放在其中,只选择其中一行.

让我知道它是如何工作的.


版权声明:本文为weixin_28810315原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。