我有一个表,其中每一行都有一个开始和结束日期时间.这些可以是任意短或长跨度.
我想查询所有行的交集的总持续时间与两个开始和停止日期时间.
你怎么能在MySQL中做到这一点?
或者您是否必须选择与查询开始和停止时间相交的行,然后计算每行的实际重叠并将其与客户端相加?
举个例子,使用毫秒来使它更清晰:
有些行:
ROW START STOP
1 1010 1240
2 950 1040
3 1120 1121
我们想知道这些行在1030到1100之间的总和时间.
让我们计算每一行的重叠:
ROW INTERSECTION
1 70
2 10
3 0
所以这个例子中的总和是80.
解决方法:
如果你的例子应该在第一行说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
使用greatest / least和date functions,你应该能够得到你需要直接操作日期类型的东西.
标签:mysql,database,sql
来源: https://codeday.me/bug/20190526/1158984.html