我有一个 MySQL 表,其中包含两个日期时间列:
CREATE TABLE test (job_id int, dateCol1 DATETIME, datecol2 DATETIME);
它包含一系列表示作业开始和结束时间的数据。我需要知道这些作业的平均持续时间(以分钟为单位),但到目前为止还不知道如何实现它。
我尝试过各种方法:
SELECT job_id, AVG(TIMEDIFF(datecol2,datecol1)) FROM test GROUP BY job_id;
SELECT job_id, SEC_TO_TIME(AVG(TIMEDIFF(datecol2,datecol1))) FROM test GROUP BY job_id;
SELECT job_id, SEC_TO_TIME(AVG(TIME_TO_SEC(datecol2)-TIME_TO_SEC(datecol1))) FROM test GROUP BY job_id;
SELECT job_id, SEC_TO_TIME(AVG(TIME_TO_SEC(FROM_UNIXTIME(UNIX_TIMESTAMP(datecol2)-UNIX_TIMESTAMP(datecol1))))) FROM test GROUP BY job_id;;
我将其与我打印出来并在 Excel 中平均的所有作业列表进行比较,但到目前为止我得到了不同的结果。
作为补充,我还需要排除任何持续时间超过 1 小时的内容。
我确信我只是把这个问题复杂化了,如果有人能告诉我如何实现,我将不胜感激,否则我最终将不得不打印出每个作业的列表,并在 Excel 中手动对它们进行平均。
最佳答案
您可以使用UNIX_TIMESTAMP得到秒差,然后得到平均值。
SELECT job_id,
SEC_TO_TIME(AVG(UNIX_TIMESTAMP(datecol2) - UNIX_TIMESTAMP(datecol1)))
FROM test
GROUP BY job_id;
如果您需要过滤那些差异大于一小时的内容...
SELECT job_id,
SEC_TO_TIME(AVG(UNIX_TIMESTAMP(datecol2) - UNIX_TIMESTAMP(datecol1)))
FROM test
WHERE UNIX_TIMESTAMP(datecol2) - UNIX_TIMESTAMP(datecol1) < 3600
GROUP BY job_id;
Br
关于MySQL 通过 group By 和排除查找平均 Timediff,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18383207/