2014-01-30 74 views
0

我正在构建MySQL查询。我有一个数据库表,我正在存储工作会议。它看起来像这样:MySQL语句中的聚合结果

(int) id 
(int) user_id 
(timestamp) created_at 
(timestamp) stopped_at 

我希望能够以秒为单位检索每个日期的时间花费。 到目前为止,这是我的查询是什么样子:

SELECT DATE(created_at) as date, TO_SECONDS(stopped_at) - TO_SECONDS(created_at) as time FROM work_sessions GROUP BY date; 

这是接近我想要的结果,但每个“日期”将只包含时间,该组中的第一行。相反,我希望将日期的每个'时间'列汇总为一个结果。

回答

1

尝试这种方式

SELECT DATE(created_at) date, 
     SUM(TIMESTAMPDIFF(SECOND, created_at, stopped_at)) time 
    FROM work_sessions 
GROUP BY DATE(created_at); 

注:这是假设,一个工作会话不能跨越午夜跨越。

这里是SQLFiddle演示

+0

完美!这正是我想要的。 关于跨越午夜的会议,我想这些只会与开始日期相总结? – Stromgren

+1

这是正确的。这些行的时差将落入'DATE(created_at)'组中。 – peterm

+0

非常适合! - 感谢您的快速回复! – Stromgren

0

这就是你想要的吗?

SELECT 
    DATE(created_at) as date, 
    GROUP_CONCAT(TO_SECONDS(stopped_at) - TO_SECONDS(created_at) SEPARATOR ", ") as time 
FROM work_sessions 
GROUP BY date;