需要使用上一个结束日期和下一个开始日期之间的范围行

问题描述 投票:0回答:1

在工作时了解资源的可用性。我在这里得到了结构。让我解释一下,希望在这里得到一些帮助。

考虑下面的表可用性,创建带有示例记录的脚本以便更好地理解。

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

我们将不胜感激。谢谢

sql mysql select stored-procedures dql
1个回答
0
投票

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/)

© www.soinside.com 2019 - 2024. All rights reserved.