首页 > 解决方案 > 生成带有记录的日期范围

问题描述

我在这个记录中有一个场景:

ID  emp  sdate               edate              datediff
10  54  2019-11-21 01:00:00 2019-11-22 01:00:00 1
11  54  2019-11-26 01:00:00 2019-11-27 01:00:00 1
12  54  2019-11-26 01:00:00 2019-11-27 01:00:00 1
13  54  2019-12-26 01:00:00 2019-12-29 01:00:00 3
14  54  2020-01-06 01:00:00 2020-01-10 01:00:00 4
15  54  2019-12-17 01:00:00 2019-12-17 19:00:00 0
16  54  2019-12-17 01:00:00 2019-12-17 22:00:00 0
17  54  2019-12-17 01:00:00 2019-12-17 23:00:00 0
18  527 2020-01-28 14:00:00 2020-01-28 15:00:00 0

所有大于一的日期差异我sdate需要edateid = 13 and 14

13  54  2019-12-26 01:00:00 2019-12-29 01:00:00 3
14  54  2020-01-06 01:00:00 2020-01-10 01:00:00 4

我需要一个类似的结果

13  54 2019-12-26 01:00:00  2019-12-26 01:00:00
13  54 2019-12-27 01:00:00  2019-12-27 01:00:00
13  54 2019-12-28 01:00:00  2019-12-28 01:00:00
13  54 2019-12-29 01:00:00  2019-12-29 01:00:00
14  54 2020-01-06 01:00:00  2020-01-06 01:00:00
14  54 2020-01-07 01:00:00  2020-01-07 01:00:00
14  54 2020-01-08 01:00:00  2020-01-08 01:00:00
14  54 2020-01-09 01:00:00  2020-01-09 01:00:00
14  54 2020-01-10 01:00:00  2020-01-10 01:00:00

1314记录有可能这样吗?

非常感谢任何答案和建议。谢谢

标签: mysqlsqldate

解决方案


这是使用递归查询的一种方法(仅在 MySQ 8.0 中可用):

with recursive cte as (
    select id, emp, sdate, sdate + interval 1 day edate, datediff from mytable
    union all
    select id, emp, sdate + interval 1 day, edate + interval 1 day, datediff - 1 
    from cte 
    where datediff - 1 > 0
)
select id, emp, sdate, edate from cte
order by id, sdate

DB Fiddle 上的演示

编号 | 雇员 | 日期 | 约会              
-: | --: | :----------------- | :-----------------
10 | 54 | 2019-11-21 01:00:00 | 2019-11-22 01:00:00
11 | 54 | 2019-11-26 01:00:00 | 2019-11-27 01:00:00
12 | 54 | 2019-11-26 01:00:00 | 2019-11-27 01:00:00
13 | 54 | 2019-12-26 01:00:00 | 2019-12-27 01:00:00
13 | 54 | 2019-12-27 01:00:00 | 2019-12-28 01:00:00
13 | 54 | 2019-12-28 01:00:00 | 2019-12-29 01:00:00
14 | 54 | 2020-01-06 01:00:00 | 2020-01-07 01:00:00
14 | 54 | 2020-01-07 01:00:00 | 2020-01-08 01:00:00
14 | 54 | 2020-01-08 01:00:00 | 2020-01-09 01:00:00
14 | 54 | 2020-01-09 01:00:00 | 2020-01-10 01:00:00
15 | 54 | 2019-12-17 01:00:00 | 2019-12-18 01:00:00
16 | 54 | 2019-12-17 01:00:00 | 2019-12-18 01:00:00
17 | 54 | 2019-12-17 01:00:00 | 2019-12-18 01:00:00
18 | 第527章 2020-01-28 14:00:00 | 2020-01-29 14:00:00

推荐阅读