在工作时了解资源的可用性。我在这里得到了结构。让我解释一下,希望在这里得到一些帮助。
考虑下面的表可用性,创建带有示例记录的脚本以便更好地理解。
CREATE TABLE availibility ( id int NOT NULL,start_date date NOT NULL, end_date date DEFAULT NULL, status tinyint NOT NULL DEFAULT '1') ENGINE=InnoDB;
INSERT INTO availibility (id, start_date, end_date, status) VALUES (1,'2024-02-01', '2024-02-10', 1), (2,'2024-02-21','2024-02-29',1);
现在返回结果如下:
**ID | Start Date | End Date | Status**
1 | 2024-02-01 | 2024-02-10 | 1
2 | 2024-02-21 | 2024-02-29 | 1
虽然我的期望是在行之间返回。下面是示例。
**ID | Start Date | End Date | Status**
1 | 2024-02-01 | 2024-02-10 | 1
NULL | 2024-02-11 | 2024-02-20 | 0
2 | 2024-02-21 | 2024-02-29 | 1
我们将不胜感激。谢谢
UNION 是你的朋友:-) 您可以使用这样的查询:
(SELECT * FROM availibility)
UNION ALL
(SELECT null AS id
, a.end_date + INTERVAL 1 DAY AS start_date
, b.start_date - INTERVAL 1 DAY AS end_date
, 0 AS status
FROM availibility a
LEFT JOIN availibility b ON b.id = a.id+1
WHERE b.id is not null
AND DATEDIFF(b.start_date, a.end_date) > 1)
ORDER BY start_date;
这是一个示例:这是一个示例:(bfiddle.uk/)