mysql 计算时间跨度_SQL中的日期范围交集

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

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

你怎么能在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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值