Sql 如何在范围列表之间选择日期[非]

Sql 如何在范围列表之间选择日期[非],sql,Sql,我的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 .

我的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
我认为这段代码可能已经做到了,但它似乎只有在筛选表中有一行时才起作用。在我的例子中,范围的数量在开始时是未知的

我还注意到,当删除“groupby”子句时,结果是一个重复日期列表,其中每个日期在每个过滤器中显示一次。我在这里:

  • 2x 2015-06-23
  • 1x 2015-06-24
  • 2x 2015-06-25
  • 1x 2015-06-26
  • 1x 2015-06-27
  • 2x 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
                 );
作为一项好处,您也不需要
分组方式
区分方式