Sql 如何在范围列表之间选择日期[非]
我的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 .
- 2015-06-23
- 2015-06-24
- 2015-06-25
- 2015-06-26
- 2015-06-27
- 2015-06-28
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
有人能帮我吗?使用
不存在:
SELECT d.date
FROM days d
WHERE NOT EXISTS (SELECT 1
FROM filter f
WHERE d.date BETWEEN f.start and f.end_time
);
作为一项好处,您也不需要分组方式
或区分方式