从单独的行计算datetime差异,并将它们相加以获得总计

8ehkhllq  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(254)

点击下面的链接查看图片。我需要用红色突出显示时间差,用蓝色突出显示时间差。然后把时间加在一起得到总数。
下面是显示所有记录的查询。前两个记录我需要得到的时间差,这将是大约3天4小时,最后两个记录应该只有2分钟。所以总共应该是3天4小时2分钟。查询图像

select so
    , createDate
    , o
    , n 
from userTrans 
where ( n = 10 OR  o = 10 ) and so = 'g220'

下面将显示我将记录分组以获得总时间。这不是我想要的,因为它得到的是最小和最大时间差。结果是32小时。

select so
                , min(createDate) minDate
                , max(createDate) maxDate
                , TIMESTAMPDIFF(MINUTE, min(createDate), max(createDate)) diff
                , CONCAT(
            FLOOR(HOUR(TIMEDIFF(min(createDate), max(createDate))) / 24), ' days ',
            MOD(HOUR(TIMEDIFF(min(createDate), max(createDate))), 24), ' hours ',
            MINUTE(TIMEDIFF(min(createDate), max(createDate))), ' minutes') diff1 
                , count(*) hits
            from userTrans 
            where ( n = 10 OR  o = 10 ) and so = 'g220'

            group by so
            order by TIMESTAMPDIFF(MINUTE, min(createDate), max(createDate)) DESC

这有可能实现吗?我希望我说得很清楚。
谢谢您

j2datikz

j2datikz1#

可以使用相关子查询来对齐计算的两个日期/时间引用。

SELECT
    *
   , TIME_TO_SEC(TIMEDIFF(createDate,nextcreatedate))
FROM (
    SELECT
        so
      , createDate
      , (
            SELECT
                createDate
            FROM table1 AS t2
            WHERE t2.so = t1.so
            AND t2.createDate > t1.createDate
            ORDER BY
                CreaDate
            LIMIT 1
        )
        AS nextcreatedate
      , n
      , test
    FROM table1 AS t1
    WHERE o = 0
) d

在其他dbms系统中使用 lead() 可能会提供更方便的方法来获取下一个需要的createdate值。

相关问题