我有一个开始/结束日期表,我希望按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
,没有问题:
但是对于fk_id=5
日期重叠:
2014-03-10 08:00
2014-06-22 15:31
有没有办法在MySQL中进行这种类型的查询?
谢谢!
答案 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`
<强>输出强>