簡體   English   中英

如何在MySQL中計算日期時間戳之間的總時間

[英]How to calculate total time between datetime stamps in MySQL

可以說我有這個記錄:

**Task Details Table: task_details**

id         task_id    user_id      task_type         date_time
1            2          7            1               2015-08-23 10:05:06
2            2          7            2               2015-08-23 10:05:33
3            2          7            1               2015-08-23 10:05:53
4            2          7            2               2015-08-24 10:10:53
5            2          7            3               2015-08-24 10:11:50
6            3          9            1               2015-08-23 10:08:06
7            3          9            2               2015-08-23 10:15:33

注意: task_type的平均值是1 =運行,2 =暫停,3 =停止

我想在MySql中獲得總的暫停時間。 如何選擇date_time的總暫停時間轉換為(小時:分鍾)。

SELECT 
  SEC_TO_TIME( SUM( TIME_TO_SEC( `date_time` ) ) ) AS psuse_time  
FROM task_details where task_type = 2 GROUP BY task_id, user_id

任何機構都可以對這里可能發生的情況提供一些解釋。

您可以在MySQL中使用Unixtime函數進行計算。

mysql> SELECT UNIX_TIMESTAMP('2015-08-24 10:10:53') - UNIX_TIMESTAMP('2015-08-23 10:05:53');
+-------------------------------------------------------------------------------+
| UNIX_TIMESTAMP('2015-08-24 10:10:53') - UNIX_TIMESTAMP('2015-08-23 10:05:53') |
+-------------------------------------------------------------------------------+
|                                                                         86700 |
+-------------------------------------------------------------------------------+
1 row in set (0.00 sec)

您可以使用MIN()和MAX()來獲取最早和最新的日期嗎?

mysql> SELECT UNIX_TIMESTAMP(MAX(datestamp)) - UNIX_TIMESTAMP(MIN(datestamp)) FROM table;
+-------------------------------------------------------------------------------+
| UNIX_TIMESTAMP(MAX(datestamp)) - UNIX_TIMESTAMP(MIN(datestamp)) |
+-------------------------------------------------------------------------------+
|                                                                         86700 |
+-------------------------------------------------------------------------------+
1 row in set (0.00 sec)

您是要計算所有這些對象之間的差異,還是只計算列表中彼此相鄰的那些對象之間的差異?

如果需要,我將使用更多信息更新此答案。

編輯

有條件更新。

SELECT UNIX_TIMESTAMP(MAX(datestamp)) - UNIX_TIMESTAMP(MIN(datestamp)) FROM task_details WHERE task_type = 2 GROUP BY task_id ORDER BY datestamp;

試試看 上面的虛擬數據沒有很多行。 我做了簡短的測試。 請報告。

編輯#2

我剛剛在測試表中添加了一些額外的行,查詢效果很好。

注意,“ datetime”是MySQL中的保留字,您應該考慮重命名該列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM