mysql - 生成带有记录的日期范围
问题描述
我在这个记录中有一个场景:
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
需要edate
从id = 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
这13
和14
记录有可能这样吗?
非常感谢任何答案和建议。谢谢
解决方案
这是使用递归查询的一种方法(仅在 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
编号 | 雇员 | 日期 | 约会 -: | --: | :----------------- | :----------------- 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
推荐阅读
- python - 在游戏窗口中移动鼠标停止游戏(pygame)
- c++ - 如何使用 GDB 从 C++ 功能逐步调试到 std::function 用户代码?
- javascript - Jquery AJAX调用未执行
- arrays - 如何通过 Ruby 中另一个数组的值对哈希进行排序?
- sql - 查询设计中的访问文本计数
- c# - System.Data.SQLite SQLiteDataReader 在使用其中一种方法时输出无效转换
- django - 使用客户用户注册 Django
- java - OffsetDateTime - 打印偏移量而不是 Z
- python - 不导入计算 exp(3.8)
- python - 从按行分隔的 df 创建列表列表