MySQL - SEC_TO_TIME 给出相同的结果,无论组如何

标签 mysql sql database datetime time

使用以下查询来获取每月的时间差异总和。基本上我有一个开始时间和停止时间。我取的差值等于运行时间,然后我想将一个月的所有运行时间相加,也就是说,一月份我们有 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

“%JAN%” 的结果 ---> enter image description here

“%FEB%” 的结果 ---> enter image description here

查询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 月除外,该月份的数据量要少得多)

enter image description here

最佳答案

下面是我当前使用的查询。由于最大 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/

相关文章:

SQL Server 不同的

Mysql命令行恢复错误 "The system cannot find the file specified."

mysql - 提取字符后的所有两个数字

html - 在mysql中分别从另外两个表插入行到一个表中

ios - FMDB 数据库查询 IOS FIND_IN_SET()

database - 使用 group by 子句计算行数

database - 如何以编程方式将产品添加到 Opencart 数据库

mysql - 如何更新以特定文本结尾的列?

mysql - 如何计算通过 id 连接的多个表的匹配项数?

java - 在ormlite中,如何拥有外部字段和字段列?