Sql 选择下一个非';不包括在一套中

Sql 选择下一个非';不包括在一套中,sql,postgresql,Sql,Postgresql,我有一个视图列出了第二天发生的某些事件 SELECT column1, column2... FROM table1 WHERE date = CAST(CURRENT_DATE + INTERVAL '1 DAY' AS DATE) 然而,我有一个“禁止日期”表:我不能使用这组特定的日期,因此,如果第二天在该禁止日期列表中,它必须跳转到下一天。有点像这样: SELECT column1, column2... FROM table1 WHERE CASE WHEN

我有一个视图列出了第二天发生的某些事件

SELECT column1, column2...
FROM table1
WHERE date = CAST(CURRENT_DATE + INTERVAL '1 DAY' AS DATE)
然而,我有一个“禁止日期”表:我不能使用这组特定的日期,因此,如果第二天在该禁止日期列表中,它必须跳转到下一天。有点像这样:

SELECT column1, column2...
FROM table1
WHERE 
    CASE 
        WHEN CAST(CURRENT_DATE + INTERVAL '1 DAY' AS DATE) IN (SELECT DISTINCT date FROM forbidden_date)
        THEN CAST(CURRENT_DATE + INTERVAL '2 DAY' AS DATE)
    ELSE 
        CAST(CURRENT_DATE + INTERVAL '1 DAY' AS DATE)
    END = date
问题是“如果第二天也在禁止名单上呢?等等?”


实际上,我可以通过脚本控制所有这些,但我真的很好奇,我是否可以通过一个查询来完成这一切

使用
generate_series
返回接下来365天的所有日期,并选择第一个非禁止日期的日期:

SELECT column1, column2...
FROM table1
WHERE date = (
    select min(d)
    from generate_series(current_date + 1, current_date + 365, '1 day') as dates(d)
    where d not in (select date from forbidden_dates))