我有一个视图,列出第二天发生的某些事件
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
问题在于“如果第二天第二天也在禁止名单中怎么办?依此类推?”
我实际上可以从脚本中控制所有这些,但我真的很好奇,如果我能通过一个查询来完成它
答案 0 :(得分:2)
使用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))