我有一个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天才可以救我。
最好的问候,
答案 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处理。
谢谢大家!