You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Snowflake中如何关联两个表排查日期缺失问题?

解决Snowflake表日期缺失查询问题

我需要解决Snowflake中的日期缺失问题:已基于特定ID创建了2017-2022年的工作日日历表(排除周末,包含所有预期日期),现在要通过关联这张日历表,找出另一张存在日期缺失的表中对应的缺失日期(即关联后显示NULL的行)。

示例数据

日历表(包含所有预期日期)

列A列B
ID2017-01-01
ID2017-01-02
ID2017-01-03

存在日期缺失的目标表

列A列B
IDNULL
ID2017-01-02
IDNULL

原查询问题分析

原查询的问题在于左连接后在WHERE子句中添加了c.id = 'id'和c.date between '2017-01-01' and '2022-12-31'的过滤条件,这会直接过滤掉左连接中日历表有数据但目标表无匹配的行(也就是我们要找的缺失日期行)——因为这些行的c.id和c.date都是NULL,无法满足WHERE子句的非空条件。

正确查询语句

SELECT 
    a.id, 
    a.date AS 预期工作日, 
    c.date AS 实际存在日期
FROM (
    SELECT DISTINCT id, date 
    FROM 日历表
    WHERE date BETWEEN '2017-01-01' AND '2022-12-31'
      AND id = 'ID'
) AS a
LEFT JOIN 目标表 c
    ON c.id = a.id 
    AND c.date = a.date 
WHERE c.date IS NULL
ORDER BY a.date;

关键调整说明

  • 将原WHERE子句中针对目标表的过滤条件移到JOIN的ON子句中,确保左连接保留日历表的所有行,不会提前过滤掉无匹配的记录
  • 通过c.date IS NULL精准筛选出日历表有记录但目标表无对应日期的行,这些就是缺失的日期
  • 保留日历表的id和date字段,清晰展示预期的工作日和实际缺失的情况

内容的提问来源于stack exchange,提问作者H.Hernandez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 19:10:29