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.
select version();
version()
8.0.36
CREATE TABLE items (
id INT PRIMARY KEY AUTO_INCREMENT,
dateadded DATE,
dateremoved DATE,
serialnumber VARCHAR(40));
INSERT INTO items(dateadded,dateremoved,serialnumber) VALUES
('2022-01-01',NULL,'ABC1'),
('2022-01-02','2022-01-04','ABC2'),
('2022-01-03',NULL,'ABC3'),
('2022-01-04','2022-01-08','ABC4'),
('2022-01-03',NULL,'DEF1'),
('2022-01-04','2022-01-04','DEF2'),
('2022-01-05',NULL,'DEFC3'),
('2022-01-06','2022-01-08','DEF4');

Records: 8  Duplicates: 0  Warnings: 0
SELECT *
FROM items;
id dateadded dateremoved serialnumber
1 2022-01-01 null ABC1
2 2022-01-02 2022-01-04 ABC2
3 2022-01-03 null ABC3
4 2022-01-04 2022-01-08 ABC4
5 2022-01-03 null DEF1
6 2022-01-04 2022-01-04 DEF2
7 2022-01-05 null DEFC3
8 2022-01-06 2022-01-08 DEF4
WITH RECURSIVE dates AS(
SELECT
min(dateadded) AS d,
0 as x
FROM items
UNION ALL
SELECT DATE_ADD(d,INTERVAL 1 DAY),x+1
FROM dates
WHERE d<=(SELECT MAX(dateadded) FROM items)
)
SELECT
d,
serialnumber
FROM dates
LEFT JOIN items ON d BETWEEN items.dateadded
AND COALESCE(items.dateremoved,'2099-12-31')
ORDER BY 1,2
d serialnumber
2022-01-01 ABC1
2022-01-02 ABC1
2022-01-02 ABC2
2022-01-03 ABC1
2022-01-03 ABC2
2022-01-03 ABC3
2022-01-03 DEF1
2022-01-04 ABC1
2022-01-04 ABC2
2022-01-04 ABC3
2022-01-04 ABC4
2022-01-04 DEF1
2022-01-04 DEF2
2022-01-05 ABC1
2022-01-05 ABC3
2022-01-05 ABC4
2022-01-05 DEF1
2022-01-05 DEFC3
2022-01-06 ABC1
2022-01-06 ABC3
2022-01-06 ABC4
2022-01-06 DEF1
2022-01-06 DEF4
2022-01-06 DEFC3
2022-01-07 ABC1
2022-01-07 ABC3
2022-01-07 ABC4
2022-01-07 DEF1
2022-01-07 DEF4
2022-01-07 DEFC3