Создать диапазон дат с записью - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть сценарий в этой записи:

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 записи создавались таким образом?

Любые ответы и советы в значительной степени оценили. Спасибо

1 Ответ

2 голосов
/ 07 февраля 2020

Вот один из способов сделать это с помощью рекурсивного запроса (доступно только в 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 :

id | emp | sdate               | edate              
-: | --: | :------------------ | :------------------
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
...