gpt4 book ai didi

sql - Oracle 范围和子查询

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

我有一个表,我正在尝试对其自身进行查询,但我不确定如何去做。

表名:schedule

  • 用户编号
  • 开始日期
  • 结束日期
  • 序列号

情况是我有很多行,其中 user_id = 0。这表示有人可以申请的开放计划。如果一个时间表被认领,它就会被分配一个特定的用户 ID。这是棘手的部分。我正在尝试选择一个用户并显示与他们已经接受或安排的时间不重叠的安排时间。

这是我目前的情况

SELECT * 
FROM schedule
WHERE user_id = 123456;

这让我知道一个人已经接受的所有时间范围

SELECT * 
FROM schedule
WHERE user_id = 0;

这为我提供了所有可用的计划行。我不太确定如何组合它们,以便最终结果是一个时间表元素列表,其中 user_id =0 并且开始日期/结束日期不存在于已分配给用户的开始日期和结束日期之间。

我觉得应该是这样的

SELECT * 
FROM schedule
WHERE user_id = 0
AND (loop through schedule rows testing for
(startdate < loopstartdate and enddate < loopstartdate) ||
(startdate > loopenddate)

我正在努力解决的问题在哪里。有任何想法吗?如果有人至少能为我指出正确的方向,让我知道我将使用什么机制来开始解决这类问题,那就太棒了。

最佳答案

SELECT a.*
FROM schedule a
WHERE user_id = 0
AND NOT EXISTS (
SELECT NULL
FROM schedule b
WHERE b.user_id = 123456
AND b.start_date <= a.end_date
AND b.end_date >= a.start_date
)

关于sql - Oracle 范围和子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5957831/

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