从不同的行计算日期时间差,并将它们相加以获得总计

时间:2018-09-21 04:40:20

标签: mysql

点击下面的链接查看图片。 我需要以红色突出显示时间差异,以蓝色突出显示时间差异。然后将时间相加即可得出总数。

下面是将显示所有记录的查询。 我需要获得前2条记录的时差,这将是3天4个小时左右,而最后2条记录应该只有2分钟。因此,总共应该在3天4小时2分钟左右。 query image

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

这有可能实现吗?我希望我很清楚。

谢谢

1 个答案:

答案 0 :(得分:0)

您可以使用相关子查询来对齐2个日期/时间参考以进行计算。

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

在其他使用lead()的dbms系统中,可以更方便地获取下一个所需的createdate值。