gpt4 book ai didi

mysql选择不在时间段内的行(由两列定义)

转载 作者:行者123 更新时间:2023-11-29 04:09:22 28 4
gpt4 key购买 nike

问题看起来像这样:

我有一个包含 classes 的表,每个表都有 start_time 和 end_time(存储为 INT - 分钟,例如 120 - 2:00、130 - 2:10),我需要做的是按用户类选择并过滤其余的检索不与所选类发生冲突的类。有人能帮忙吗 ?也许有什么线索?

示例行:

id start end
1 0 100
2 50 150
3 160 200
4 50 150
5 50 100
6 200 300

如果我选择了 id=1 那么它应该返回第 3,6 行(它覆盖了 50 到 100 之间的 2,4,5,所以不可能同时参加这两个类(class))

如果我选择了 id=2,6 那么它应该返回第 3 行

如果我选择了 id=2 那么它应该返回第 3,6 行

如果我选择了 id=6 那么它应该返回第 1、2、3、4、5 行

如果我选择了 id=3 那么它应该返回第 1,2 行

最佳答案

这为一个给定的 ID 提供了重叠的 ID:

select id from classes c
inner join classes noc on noc.id = <given id>
where c.start > noc.end or c.end < noc.start
;

编辑:

就我现在对扩展示例的理解而言,您想要提供 id 的任意子集作为输入,并希望所有 id 不与它们中的任何一个重叠。让我们试试:

select c.* 
from classes c
left join classes noc on noc.id in (<idlist>)
and noc.start < c.end
and noc.end > c.start
where noc.id is null;

根据“重叠”的含义,“<”和“>”可能是“<=”和“>=”。

你听起来不像是在寻找子类,但我认为你会在 set-djungle 中找到自己的出路! ;-)

你的例子“selected id=3”给我 1,2,4,5,6,因为 3 没有重叠。

解释:

  • 完成类(class)
  • 寻找与给定类重叠的类
  • 并且只显示那些没有找到重叠类的类。

noc 代表“不允许的类”。如果找到该类,则说明您的给定集存在重叠。

关于mysql选择不在时间段内的行(由两列定义),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16866204/

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