【问题标题】:How to check the Data gap in the query如何检查查询中的数据间隙
【发布时间】:2021-07-16 10:37:43
【问题描述】:

场景:在以下场景中,2021 年 4 月 21 日的插入日期缺失 对于最新的记录应该检查它是否有 4/20 如果没有则计为 1 从 4 月 14 日到 4 月 20 日的数据我们没有发现任何差距 - 请对此查询提供帮助

如果需要更多信息,请告诉我假设表名是 TABA

【问题讨论】:

    标签: sql date count


    【解决方案1】:

    处理此问题的一种典型方法是使用日历表,其中包含您的数据可能涵盖的所有日期。代替日历表,我们可以像这样内联一个:

    SELECT d.Date
    FROM
    (
        SELECT '2021-04-14' AS Date UNION ALL
        SELECT '2021-04-15' UNION ALL
        SELECT '2021-04-16' UNION ALL
        SELECT '2021-04-17' UNION ALL
        SELECT '2021-04-18' UNION ALL
        SELECT '2021-04-19' UNION ALL
        SELECT '2021-04-20' UNION ALL
        SELECT '2021-04-21' UNION ALL
        SELECT '2021-04-22'
    ) d
    LEFT JOIN yourTable t
        ON t.InsertedDate = d.Date
    WHERE
        t.InsertedDate IS NULL;
    

    【讨论】:

    • 如果不明确提供日期值,我们还有其他选择吗
    • 是的,在您的数据库中创建一个日历表并保留它以供诸如此类的查询使用。然后,您不需要大丑陋的内联联合所有查询......这将被对日历表的引用所取代。您从未告诉我们您的 SQL 版本,但几乎每个版本都支持轻松制作日历表。
    • SELECT d.AWS FROM ( SELECT insertdate = DATE_SUB(inserteddate , INTERVAL 4 DAY) AS AWS UNION ALL SELECT insertdate = DATE_SUB(inserteddate , INTERVAL 3 DAY) UNION ALL SELECT insertdate = DATE_SUB(inserteddate , INTERVAL 2 天)联合所有选择插入日期 = DATE_SUB(插入日期,间隔 1 天)联合所有选择插入日期)d LEFT JOIN 示例 T ON t.inserteddate = d.aws WHERE t.inserteddate 为空 - 在 4:14 行中获取无法识别的名称(插入日期)
    猜你喜欢
    • 1970-01-01
    • 2019-08-18
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 2020-03-14
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    相关资源
    最近更新 更多