MySQL如何获得可能重叠日期的开始/结束日期的总和

时间:2017-03-15 18:32:42

标签: mysql

我有一个开始/结束日期表,我希望按ID分组,并将每个ID的总时间相加。例如:

fk_id            start              end
3                2014-03-21 10:02   2014-05-01 08:05
3                2014-06-05 05:00   2014-06-20 22:00  
5                2014-03-10 08:00   2014-06-20 13:50  
5                2014-05-10 09:45   2014-06-22 15:31

对于fk_id=3,没有问题:

  • 我可以为每一行做一个TIMESTAMPDIFF并将它们相加

但是对于fk_id=5日期重叠:

  • 所以在这种情况下应该在两者之间完成TIMESTAMPDIFF
    • 2014-03-10 08:00
    • 2014-06-22 15:31

有没有办法在MySQL中进行这种类型的查询?

谢谢!

1 个答案:

答案 0 :(得分:1)

使用变量在聚合总计之前修复范围

<强> SQL DEMO

SELECT t.`fk_id`,
       @rn := if(@id = `fk_id`, 
                 @rn + 1, 
                 if(@id:=`fk_id`, if(@end:='1900-01-01 00:00:00',1,1), if(@end:='1900-01-01 00:00:00',1,1))   
                ) as rn,
       if(start < @end, 
          @end, 
          if(@end := end, `start`, `start`) 
         ) as `start`, 
       end
FROM Table1 t
CROSS JOIN (SELECT @id := 0, @end := STR_TO_DATE('1900-01-01 00:00:00', '%Y-%m-%d %H:%i:%s') as e, @rn := 0) t
ORDER BY `fk_id`, `start`

<强>输出

enter image description here