使用以下查询来获取每月的时间差异总和。基本上我有一个开始时间和停止时间。我取的差值等于运行时间,然后我想将一个月的所有运行时间相加,也就是说,一月份我们有 x 小时 y 分钟 z 秒的运行时间。
但是,当对这些值求和时,我遇到了奇怪的结果。对一月和二月的秒数求和时。我得到不同的结果。然后,当将秒转换为时间戳时,它们解析为相同的时间值。
查询1
<小时/>select sum(TIME_TO_SEC(diff)) as "total runtime" from
(SELECT
CASE WHEN RIGHT(stp_time,3)="DUR"
THEN
TIMEDIFF(LEFT(stp_time,8), '00:00:00')
ELSE
TIMEDIFF(
STR_TO_DATE(CONCAT(stp_date," ",LEFT(stp_time,8)), '%d/%b/%Y %H:%i:%s'),
STR_TO_DATE(CONCAT(str_date," ",LEFT(str_time,8)), '%d/%b/%Y %H:%i:%s')
)
END AS diff, ext_umid, str_date
FROM vms1_asrun
where str_date like "%JAN%") as a
查询2
select monthname(STR_TO_DATE(STR_DATE, "%d/%b/%Y")) as month,
SEC_TO_TIME(sum(TIME_TO_SEC(diff)))
from
(SELECT
CASE WHEN RIGHT(stp_time,3)="DUR"
THEN
TIMEDIFF(LEFT(stp_time,8), '00:00:00')
ELSE
TIMEDIFF(
STR_TO_DATE(CONCAT(stp_date," ",LEFT(stp_time,8)), '%d/%b/%Y %H:%i:%s'),
STR_TO_DATE(CONCAT(str_date," ",LEFT(str_time,8)), '%d/%b/%Y %H:%i:%s')
)
END AS diff, ext_umid, str_date
FROM vms1_asrun) as a
group by month
每个月的结果都相同(12 月除外,该月份的数据量要少得多)
最佳答案
下面是我当前使用的查询。由于最大 TIME 对象值的限制,无法访问长时间运行的时间码。 我选择的解决方法是简单地显示所用的小时数,而不是时间戳
select monthname(STR_TO_DATE(STR_DATE, "%d/%b/%Y")) as month,
sum(TIME_TO_SEC(diff))/3600 as hours
from
(SELECT
CASE WHEN RIGHT(stp_time,3)="DUR"
THEN
TIMEDIFF(LEFT(stp_time,8), '00:00:00')
ELSE
TIMEDIFF(
STR_TO_DATE(CONCAT(stp_date," ",LEFT(stp_time,8)), '%d/%b/%Y %H:%i:%s'),
STR_TO_DATE(CONCAT(str_date," ",LEFT(str_time,8)), '%d/%b/%Y %H:%i:%s')
)
END AS diff, ext_umid, str_date
FROM vms1_asrun) as a
group by month
关于MySQL - SEC_TO_TIME 给出相同的结果,无论组如何,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33303209/