By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
select version();
version() |
---|
8.0.36 |
CREATE TABLE intervals (
num int,
valid_from datetime,
valid_until datetime
);
INSERT INTO intervals
(num, valid_from, valid_until)
VALUES
(1, NOW(), ADDDATE(NOW(), 7)),
(2, ADDDATE(NOW(), 1), ADDDATE(NOW(), 8)),
(3, ADDDATE(NOW(), 2), ADDDATE(NOW(), 9));
Records: 3 Duplicates: 0 Warnings: 0
SELECT *
FROM (
SELECT ordered_intervals.dt as dt,
SUM(ordered_intervals.dt_ord) OVER (ORDER BY ordered_intervals.dt ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS count
FROM (
SELECT pt.valid_from as dt, 1 as dt_ord FROM intervals pt
UNION
SELECT pt2.valid_until as dt, -1 as dt_ord FROM intervals pt2
ORDER BY dt
) as ordered_intervals
) as sums
WHERE sums.count < 3
ORDER BY sums.dt ASC
dt | count |
---|---|
2024-07-23 09:41:56 | 2 |
2024-07-25 09:41:56 | 1 |
2024-07-30 09:41:56 | -1 |
2024-07-31 09:41:56 | -3 |
2024-08-01 09:41:56 | -2 |