mysql big-timediff之和

iaqfqrcu  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(212)

我有一个sql表活动,其中有两个字段名为start\u at,end\u at,每个字段都是datetime列,还有一个airline\u id字段。
让我们把时间间隔称为“结束时间-开始时间”。
我的目标是,对于每一个飞机id,求出某个时间段内每个活动间隔的总和。
基本上,它会像

SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF(ended_at, started_at))))
FROM activity
WHERE started_at > :started_at
AND ended_at < :ended_at
GROUP BY airplane_id

问题是,我的处理周期可能超过了最大时间大小(约838小时),我正在寻找一个有效的解决办法。
在放弃并提取原始数据并用php处理它们之前,我希望一些sql天才可以拯救我。
致以最诚挚的问候,

0aydgbwb

0aydgbwb1#

谢谢大家的回答。
正如我所想的,没有办法用纯sql完成我的工作,它需要一些php处理。
所以,我要去做一次大规模的php治疗。
谢谢大家!

bd1hkmkf

bd1hkmkf2#

把结果表示成分数小时或天数,而不是时间,怎么样?

SELECT SUM(TIME_TO_SEC(TIMEDIFF(ended_at, started_at))) / (60 * 60) as fractional_hours

或:

SELECT SUM(TIME_TO_SEC(TIMEDIFF(ended_at, started_at))) / (24 * 60 * 60) as fractional_hours

就我个人而言,我认为在如此长的时间间隔内使用时间格式没有多大价值。

plupiseo

plupiseo3#

你为什么不用 timestampdiff() ?

SELECT sum(timestampdiff(SECOND, ended_at, started_at))
       FROM activity
...

返回一个 integer ,这样你就不用面对 time (但对于 integer 当然)你不需要转换成秒,因为你已经可以在几秒钟内得到结果。

相关问题