我有以下表结构:
+----+---------------------+---------------------+
| 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_at
和closed_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,负值等,以区分其他真正的值。
答案 0 :(得分:0)
您需要按小时按时间进行分组,并按最长时间的差异时间进行分组
SELECT max(timestampdiff(
MINUTE,
a.created_at,closed) as periods
FROM `times` as a group by hour(created_at)
现在您将根据您的要求获得结果。