如何计算MySQL中日期时间戳之间的总时间

时间:2015-08-24 05:12:14

标签: 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

N.B: task_type mean is 1 = running,2 = Pause,3 = stop

我希望在MySql中获得总暂停时间。如何选择date_timein总暂停时间转换为(小时:分钟)。

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

任何机构都可以就这里发生的事情提供一些解释。

1 个答案:

答案 0 :(得分:1)

您可以使用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中的保留字,您应该考虑重命名该列。