2014-10-01 42 views
0

我想从某些ID分组的几行中选择持续时间。该行包含时间(00:04:25),(00:05:25),(12:04:25)(小时,分钟,秒)等。我如何总结这些行并将总持续时间返回为天,小时, 分钟 ? 我所做的是这个(实际上它不是我,我看到它在这里计算器等后)Mysql SUM两次并将总持续时间返回为天,小时,分钟

$sql = 'SELECT r.*,d.*,  CONCAT(
     FLOOR(HOUR(SEC_TO_TIME(SUM(TIME_TO_SEC(r.duration))))/24), "' . $this-  >_translator->translate(' days ') . '", 
     MOD(HOUR(SEC_TO_TIME(SUM(TIME_TO_SEC(r.duration)))), 24), "' . $this->_translator->translate(' hours ') . '", 
     MINUTE(SEC_TO_TIME(SUM(TIME_TO_SEC(r.duration)))), "' . $this->_translator->translate(' minutes ') . '") as total_duration, 
     ROUND(SUM(TIME_TO_SEC(r.duration)/3600)) as total_duration_hours FROM routes r LEFT JOIN drivers d ON d.id = r.driver_id GROUP BY r.driver_id'; 

这是由工作不正常。在r。*中还存储了平均速度,距离,例如这段代码返回2小时23分钟,当它返回2小时30分钟。请帮忙。谢谢 !

编辑: 下面是一些数据:

Full texts  id filename distance startRoute endRoute duration avgSpeed car_id fromLocation toLocation driver_id 
Edit Edit Copy Copy Delete Delete 748  GPSdata20140109073948 5.74 2014-01-09 07:40:23  2014-01-09 07:50:38  00:10:15 33.6 20 22, Ulhaus, Langerwehe 27, Königsbenden, Eschweiler 18 
Edit Edit Copy Copy Delete Delete 754  GPSdata20140110182521 1.43 2014-01-10 18:25:26  2014-01-10 18:29:31  00:04:05 21.01 18 36, Grüner Weg, Aachen  3, Rehmplatz, Aachen 18 
Edit Edit Copy Copy Delete Delete 758  GPSdata20140112145245 70.55 2014-01-12 14:54:05  2014-01-12 16:54:42  02:00:37 35.09 23 275, Hauptstraße, Langerwehe , Pescher Weg, Cologne 18 
Edit Edit Copy Copy Delete Delete 759  GPSdata20140113072802 6.17 2014-01-13 07:28:37  2014-01-13 07:37:02  00:08:25 43.98 19 13, Bahnhofstraße, Langerwehe 27, Königsbenden, Eschweiler 18 

5.74 + 1.43 + 70.55 + 6.17 = 83.9距离 33.6 + 21.01 + 35.09 + 43.98 = 33.42平均速度 所以距离/平均速度=2小时和30分钟,我得到2小时23分钟。我在哪里做错了?

+0

你想在mysql操作中进行所有操作吗? – rpirez 2014-10-01 09:39:42

+0

你能提供创建表语句和一些数据吗? – nicolas 2014-10-01 09:44:24

+0

除非组内的内容完全相同,否则不应在GROUP BY中使用未聚合的表达式。我认为关于持续时间的计算没有问题。 – 2014-10-01 11:07:44

回答

1

可以使用下面的查询,以获得所需的结果:

select CONCAT(FLOOR(time_in_sec/(60*60*24))," days " , 
FLOOR((time_in_sec/(60*60*24) - FLOOR(time_in_sec/(60*60*24)))*24)," hours ", 
FLOOR(((time_in_sec/(60*60*24) - FLOOR(time_in_sec/(60*60*24)))*24 - 
FLOOR((time_in_sec/(60*60*24) - 
FLOOR(time_in_sec/(60*60*24)))*24))*60)," minutes") total_duration 

FROM (
select SUM(TIME_TO_SEC(r.duration)) time_in_sec 
from routes r LEFT JOIN drivers d ON d.id = r.driver_id 
GROUP BY r.driver_id') T; 

查询的逻辑如下:
1.总和秒并将其存储在变量time_in_sec。在从使用这种结果:

FROM (
    select SUM(TIME_TO_SEC(r.duration)) time_in_sec 
    from routes r LEFT JOIN drivers d ON d.id = r.driver_id 
    GROUP BY r.driver_id') T; 
  • 休息是纯数学。
    a。):楼层(time_in_sec/3600)。 。
    b)中数小时:地板((time_in_sec/3600 - 天)* 24)
    c)中对于分钟:地板(((time_in_sec/3600 - 天)* 24 - 小时)* 60)
  • +0

    看到我的编辑,TNX的答案:) – 2014-10-01 12:04:53

    +0

    我很困惑,因为当我分开距离/速度我得到一件事,但当我总和总距离和总速度/ 4,然后划分总距离/总速度我得到另一个东西,我在这里想念什么? – 2014-10-01 12:45:09

    +0

    我解决了我的问题,只是问“几秒钟”不是在那里几分钟? – 2014-10-02 07:11:33

    相关问题