gpt4 book ai didi

sql - 如何在范围列表之间选择[不]日期

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

我的 SQL 查询有问题。我的问题是我有一个日期列表,例如:

  • 2015-06-23
  • 2015-06-24
  • 2015-06-25
  • 2015-06-26
  • 2015-06-27
  • 2015-06-28

在名为“days”的表中。

我有另一个表“filter”,其中包含两列中的范围列表:

        start  |  end
--------+---------
2015-06-24 | 2015-06-24
2015-06-26 | 2015-06-27
... | ...

我想要得到的结果是:

  • 2015-06-23
  • 2015-06-25
  • 2015-06-28

即不在这些范围内的日期。

我试过这个:

SELECT day.date
FROM days, filter
WHERE days.date not between filter.start and filter.end_time
group by day.date

我认为这段代码可能已经成功了,但它似乎只在过滤器表中有一行时才有效。在我的例子中,范围的数量在开始时是未知的。

我还注意到,当删除“group by”子句时,结果是一个重复日期列表,每个日期在每个过滤器验证时出现一次。即在这里:

  • 2x 2015-06-23
  • 1 次 2015-06-24
  • 2 次 2015-06-25
  • 1x 2015-06-26
  • 1x 2015-06-27
  • 2 次 2015-06-28

Ohe 解决方案可能是只选择达到最大出现次数的行,但是有我的 sql 限制。另外我不确定这是否是最有效的方法。

有人可以帮我解决这个问题吗?

最佳答案

使用不存在:

SELECT d.date
FROM days d
WHERE NOT EXISTS (SELECT 1
FROM filter f
WHERE d.date BETWEEN f.start and f.end_time
);

好处是,您也不需要 GROUP BYDISTINCT

关于sql - 如何在范围列表之间选择[不]日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31001677/

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