我有以下表結構: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中。 –