add batch remove batch split batch comment selection show hidden batches hide batch highlight batch
db<>fiddle
donate feedback about
By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
CREATE TABLE t(id INT,start_date DATE,end_date DATE)
INSERT INTO t VALUES
(1,'2021-12-20','2021-12-20'),
(2,'2021-12-15','2021-12-18'),
(3,'2021-12-10','2021-12-11')
Records: 3  Duplicates: 0  Warnings: 0
WITH RECURSIVE cte
AS
(
SELECT 1 i
UNION ALL
SELECT i + 1 i
FROM cte
WHERE i + 1 <= ( SELECT DATEDIFF(MAX(end_date),MIN(start_date))+1 FROM t )
), dmin AS
(
SELECT MIN(start_date) AS min_date FROM t
)
SELECT id, DATE_ADD(t2.min_date, INTERVAL i-1 DAY) AS date
FROM cte
LEFT JOIN (SELECT * FROM t JOIN dmin ) AS t2
ON DATE_ADD(t2.min_date, INTERVAL i-1 DAY) >= start_date
AND DATE_ADD(t2.min_date, INTERVAL i-1 DAY) <= end_date
WHERE start_date IS NOT NULL
ORDER BY id, date DESC
id date
1 2021-12-20
2 2021-12-18
2 2021-12-17
2 2021-12-16
2 2021-12-15
3 2021-12-11
3 2021-12-10