我有以下表结构:Mysql的TIMESTAMPDIFF总和
+----+---------------------+---------------------+
| 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
到clacualte在timestap场两个日期之间的diffirence。没有如果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 |
+---------+
在这里,我想只有第一个结果whuch represnts的重叠期间的净时间。使用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,负值等可以与其他真正的值区分开来。
我认为这是不可能在MySQL中。 –