mysql - 所有 timediff 值的总和显示错误值

标签 mysql datetime

我试图汇总所有时差值并以 HH:mm:ss 格式显示,但结果不如应有的那样。

这是我的 DDL 和我目前的尝试:

CREATE TABLE tblproduction
    (
     OperaterID int,
     OperationID varchar(20), 
     StartDateTime datetime,
     EndDateTime datetime
    );

INSERT INTO `tblproduction` VALUES 
(227, 'OPEE21', '2014-12-01 05:51:34', '2014-12-01 06:48:30'),
(227, 'OPEE21', '2014-12-01 06:54:37', '2014-12-01 10:14:30'),
(227, 'OPEE21', '2014-12-01 10:23:03', '2014-12-01 13:41:31'),
(227, 'OPEE21', '2014-12-02 05:54:09', '2014-12-02 07:50:53'),
(227, 'OPEE21', '2014-12-02 07:55:03', '2014-12-02 13:37:56'),
(227, 'OPEE21', '2014-12-09 14:06:57', '2014-12-09 17:20:09'),
(227, 'OPEE21', '2014-12-09 17:22:07', '2014-12-09 21:51:24'),
(227, 'OPEE21', '2014-12-11 14:06:12', '2014-12-11 18:36:47'),
(227, 'OPEE21', '2014-12-12 14:07:09', '2014-12-12 14:58:42'),
(227, 'OPEE21', '2014-12-12 15:05:23', '2014-12-12 15:49:37'),
(227, 'OPEE21', '2014-12-12 15:55:12', '2014-12-12 21:55:24'),
(227, 'OPEE21', '2014-12-15 05:54:42', '2014-12-15 12:32:58'),
(227, 'OPEE21', '2014-12-15 12:38:48', '2014-12-15 13:40:08'),
(227, 'OPEE21', '2014-12-18 10:47:07', '2014-12-18 13:36:55'),
(227, 'OPEE21', '2014-12-19 06:16:58', '2014-12-19 13:37:29'),
(227, 'OPEE21', '2014-12-22 14:09:29', '2014-12-22 21:53:45'),
(227, 'OPEE21', '2014-12-23 14:26:54', '2014-12-23 17:12:13'),
(227, 'OPEE21', '2014-12-23 17:14:11', '2014-12-23 18:00:40'),
(227, 'OPEE21', '2014-12-23 18:03:51', '2014-12-23 21:07:57'),
(227, 'OPEE21', '2014-12-23 21:08:56', '2014-12-23 21:46:58');

SELECT p.OperaterID
     , p.OperationID
     , p.StartDateTime
     , p.EndDateTime
     , TIME_FORMAT(SUM(TIMEDIFF(p.EndDateTime, p.StartDateTime)), '%H:%i:%s') TotalTime
  FROM tblproduction p
 WHERE p.StartDateTime >= '2014-12-01 00:00:00' 
   AND p.StartDateTime <= '2014-12-31 23:59:59' 
   AND p.OperaterID = 227 
   AND p.OperationID = 'OPEE21'
 GROUP 
    BY p.OperationID;

+------------+-------------+---------------------+---------------------+-----------+
| OperaterID | OperationID | StartDateTime       | EndDateTime         | TotalTime |
+------------+-------------+---------------------+---------------------+-----------+
|        227 | OPEE21      | 2014-12-01 05:51:34 | 2014-12-01 06:48:30 | 63:48:44  |
+------------+-------------+---------------------+---------------------+-----------+

...和同样的 fiddle SQL Fiddle

结果应该是 67:52:04 但查询返回 63:48:44。我现在不知道我在哪里失去了 4 个小时。

最佳答案

这是对 TIMEDIFF 结果应用 SUM。您应该先将 TIMEDIFF 转换为秒数,而不是对其求和,然后再转换回来。

SELECT OperaterID, OperationID, 
StartDateTime, EndDateTime,
SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF(tblproduction.EndDateTime, tblproduction.StartDateTime)))) AS TotalTime
FROM tblproduction
WHERE StartDateTime >= '2014-12-01 00:00:00' AND StartDateTime <= '2014-12-31 23:59:59' AND OperaterID = 227 AND OperationID = 'OPEE21'
GROUP BY OperationID;

关于mysql - 所有 timediff 值的总和显示错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28236405/

相关文章:

c++ - strptime() 的问题 - %p 未被考虑在内

python - Django 模型日期字段中的可选年/月/日

php - PDO 获取数据返回字符串数组

python - 在 Pandas 中找到最接近给定时间的 DataFrame 行

java - 将之前访问 MySQL 服务器的代码迁移到访问 MS SQL Server

php - 如何用字母在前,符号在后对 MySQL 结果进行排序?

mysql - 在 mysql 查询中使用 IST 时间

javascript - 解析 utc 时,从现在开始的时刻在 5 小时后返回

mysql - mysql中的连接表没有正确使用索引?

MySQL 按第一周值分组,同时包括第二周值