SQL中的日期范围交集

Wil*_*ill 4 mysql sql database

我有一个表,其中每一行都有一个开始和结束日期时间.这些可以是任意短或长跨度.

我想查询所有行的交集的总持续时间与两个开始和停止日期时间.

你怎么能在MySQL中做到这一点?

或者您是否必须选择与查询开始和停止时间相交的行,然后计算每行的实际重叠并将其与客户端相加?


举个例子,使用毫秒来使它更清晰:

有些行:

ROW  START  STOP
1    1010   1240
2     950   1040
3    1120   1121
Run Code Online (Sandbox Code Playgroud)

我们想知道这些行在1030到1100之间的总和时间.

让我们计算每一行的重叠:

ROW  INTERSECTION
1    70
2    10
3     0
Run Code Online (Sandbox Code Playgroud)

所以这个例子中的总和是80.

Unr*_*son 5

如果你的例子应该在第一行说70

假设@range_start和@range_end作为条件参数:

SELECT SUM( LEAST(@range_end, stop) - GREATEST(@range_start, start) )
FROM Table
WHERE @range_start < stop AND @range_end > start
Run Code Online (Sandbox Code Playgroud)

使用最大 /最小和日期函数,您应该能够获得直接操作日期类型所需的内容.