gpt4 book ai didi

sql - 如何检查一组行是否覆盖整个时间范围

转载 作者:行者123 更新时间:2023-12-02 09:25:57 26 4
gpt4 key购买 nike

我有一个表,其中有两列StartTime和EndTime。值填写为:

 declare @tbl Table(
colA VARCHAR(50),
colS VARCHAR(50),
DATES DATE,
STARTTIME TIME,
ENDTIME TIME,
ID BIGINT NOT NULL IDENTITY(1,1)
)

INSERT INTO @tbl
SELECT 'A','S',convert(date,'2015-09-21'),convert(TIME,'12:45'),convert(TIME,'13:30')
UNION ALL
SELECT 'A','S',convert(date,'2015-09-21'),convert(TIME,'13:15'),convert(TIME,'13:45')
UNION ALL
SELECT 'A','S',convert(date,'2015-09-21'),convert(TIME,'13:30'),convert(TIME,'16:50')
UNION ALL
SELECT 'A','S',convert(date,'2015-09-21'),convert(TIME,'13:15'),convert(TIME,'13:50')

因此,我要检查此表所有行中的StartTime和EndTime是否覆盖此表的Minimum StartTime和Maximum EndTime之间的整个时间段。
因此,从这些行中可以明显看出这是事实。但是,对于以下几组行,由于它们之间存在时间间隔,因此将不成立。所以我只想要True或False作为结果。
INSERT INTO @tbl
SELECT 'A','S',convert(date,'2015-09-21'),convert(TIME,'08:45'),convert(TIME,'09:15')
UNION ALL
SELECT 'A','S',convert(date,'2015-09-21'),convert(TIME,'11:10'),convert(TIME,'11:25')

我设法完成了所有其他任务,这是它们的最终结果。这是最后的任务,我完全不知道如何去做。任何帮助,将不胜感激。

最佳答案

-最后一列将是第一个示例数据为1,第二个为0。

    SELECT t.*, 
CASE WHEN t.ENDTIME < m.MaxStartTime THEN 0
WHEN t.STARTTIME > m.MinEndTime THEN 0
ELSE 1 END AS Covered
FROM @tbl AS t
JOIN
(SELECT DATES,
MIN(ENDTIME) MinEndTime,
MAX(STARTTIME) MaxStartTime
FROM @tbl
GROUP BY DATES) AS m
ON t.DATES = m.DATES

关于sql - 如何检查一组行是否覆盖整个时间范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38027791/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com