重叠间隔之间的Mysql timestampdiff总和

时间:2017-04-03 17:13:50

标签: mysql sql timestamp intervals

我有以下表结构:

+----+---------------------+---------------------+  
| id | created_at          | closed              |  
+----+---------------------+---------------------+  
|  1 | 2017-04-03 04:00:00 | 2017-04-03 04:30:00 |  
|  2 | 2017-04-03 04:25:00 | 2017-04-03 04:35:00 |  
+----+---------------------+---------------------+  

在我的真实SQL查询中,我使用timestampdiff来确定时间段字段中两个日期之间的差异。如果所有记录的ctreated_atclosed_at以不同的时间间隔开始没有问题,那么我将能够为所有行消耗时间,如下所示:

SELECT SUM(timestampdiff(SECOND, created_at, closed_at)) as TotalTime FROM table

我的问题就像上面显示的表格,时间间隔越过。上述查询将生成900,但我应该600

我尝试过类似的事情:

SELECT timestampdiff(
                    MINUTE,
                    a.created_at,
                    (SELECT max(b.closed) from times as b WHERE b.created_at < a.closed)
                    ) as periods
FROM `times` as a

结果是:

+---------+
| periods |
+---------+
|      35 |
|      10 |
+---------+

在这里,我只想要第一个结果,重复重复期间的净时间。在前一个查询中使用MAX应该返回第一条记录,但是这会导致忽略在假设该表变为futere中添加的任何其他句点组:

+----+---------------------+---------------------+
| id | created_at          | closed              |
+----+---------------------+---------------------+
|  1 | 2017-04-03 04:00:00 | 2017-04-03 04:30:00 |
|  2 | 2017-04-03 04:25:00 | 2017-04-03 04:35:00 |
|  3 | 2017-04-03 05:00:00 | 2017-04-03 05:15:00 |
+----+---------------------+---------------------+

上面的查询返回:

+---------+
| periods |
+---------+
|      35 |
|      10 |
|      15 |
+---------+

同样在这里我不想要第二条记录,因为它描述了先前在第一条记录中计算的时间段。事实上,我不知道在MySQL中是否有可能获得(例如上面的例子)只有两个记录甚至三个记录,但第二个是null,0,负值等,以区分其他真正的值。

1 个答案:

答案 0 :(得分:0)

您需要按小时按时间进行分组,并按最长时间的差异时间进行分组

SELECT max(timestampdiff(
                    MINUTE,
                    a.created_at,closed)  as periods
FROM `times` as a group by hour(created_at)

现在您将根据您的要求获得结果。

相关问题