TIMEDIFF大的MySQL SUM

时间:2018-08-24 10:50:14

标签: mysql sql time

我有一个SQL Table活动,其中有两个字段,分别名为Beginning_at,Ended_at(分别是Datetime列)和planet_id字段。

我们将间隔称为“ end_at-starts_at”持续时间。

我的目标是,对于每个planet_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

问题是我的处理期限可能超过了最大时间长度(大约838h),因此我正在寻找一种有效的解决方法。

在放弃并仅提取原始数据并在PHP中进行处理之前,我希望某些SQL天才可以救我。

最好的问候,

3 个答案:

答案 0 :(得分:0)

如何将结果表示为小数小时或天数,而不是时间?

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

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

答案 1 :(得分:0)

您为什么不使用timestampdiff()

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

这将返回一个integer,因此您不必处理time的限制(但是当然要处理integer的限制。)并且您将不需要转换为秒,因为您已经可以在几秒钟内获得结果。

答案 2 :(得分:0)

谢谢大家的回答。

按照我的想法,在纯SQL中无法做我的事,这需要一些PHP处理。

因此,我将进行大规模的PHP处理。

谢谢大家!