我的类别表中有2个跨度,每个跨度覆盖十月的一半跨度。如果完成了整个十月的入学登记,则应确认Cateoryspans涵盖了整个十月的入学登记时间。
CATEGORY:
beginDT EndDt
01-sep-2018 16-oct-2018
17-sep-2018 31-Dec-2018
MEMBER Enroll:
BeginDt EndDt
01-sep-2018 31-oct-2018
当我要考虑十月份的会员注册时。需要查询以确认CATEGORY表范围中是否涵盖了整个十月。
答案 0 :(得分:1)
在当前的桌子设计上很难调整。我建议改为维护一个日历表,该表要验证的值显示在类别表中。在这种情况下,请考虑内联的下表:
WITH calendar AS (
SELECT date '2018-10-01' AS dt FROM dual UNION ALL
SELECT date '2018-10-02' FROM dual UNION ALL
SELECT date '2018-10-03' FROM dual UNION ALL
...
SELECT date '2018-10-31' FROM dual
)
然后,我们可以简单地将此日历表加入类别表,以标记10月中未涵盖的任何日期:
SELECT
c.dt
FROM calendar c
LEFT JOIN category cat
ON c.dt BETWEEN CAT.beginDT AND cat.EndDt
WHERE
cat.beginDT IS NULL;
根据所需的确切输出,我们可以对上述查询进行重新处理。但希望很明显,使用日历表报告所需的内容要容易得多。