我试图比较2个表(克隆表x原始表)使用完全外部连接snowflake,但没有得到我期望的结果:

select 
    'invoice' as TABLE_NAME, 
    to_date(prd.date) as TRANSACTION_DATE,
    count(prd.date) as PROD_COUNT,
  from invoice_latest prd
full outer join
(
    select 
    'invoice_clone' as TABLE_NAME, 
    to_date(date) AS TRANSACTION_DATE,
    count(1) as CLONE_COUNT
    from invoice_latest_clone
    where to_date(date) >= '2024-04-01'
    group by to_date(date)
    order by to_date(date)
) cln
on to_date(prd.date) = cln.TRANSACTION_DATE
where to_date(prd.date) >= '2024-04-02' OR cln.TRANSACTION_DATE is not null
group by to_date(prd.date)
order by to_date(prd.date)

我希望4月1日与原始表相关的计数为NULL,但得到以下结果:

enter image description here

推荐答案

问题是,您正在进行连接,然后过滤连接的结果,然后计数.

你应该先过滤,然后再执行连接.

一个类似于你的查询,给出了类似的坏结果:

select 'invoice' as table_name
    , o_orderdate as transaction_date
    , count(prd.o_orderdate) as prod_count
    , max(clone_count)
from snowflake_sample_data.tpch_sf1.orders prd
full outer join (
    select 'invoice_clone' as table_name
        , o_orderdate as transaction_date
        , count(1) as clone_count
        from snowflake_sample_data.tpch_sf1.orders 
        where o_orderdate >= '1998-07-29'
        group by o_orderdate
        order by o_orderdate        
) cln
on prd.o_orderdate = cln.transaction_date
where o_orderdate >= '1998-07-30' or cln.transaction_date is not null
group by prd.o_orderdate
order by 2

enter image description here

查询已修复:

select 'invoice' as table_name
    , transaction_date
    , count(prd.o_orderdate) as prod_count
    , max(clone_count)
from (
    select *
    from snowflake_sample_data.tpch_sf1.orders 
    where o_orderdate >= '1998-07-30'
) prd
full outer join (
    select 'invoice_clone' as table_name
        , o_orderdate as transaction_date
        , count(1) as clone_count
        from snowflake_sample_data.tpch_sf1.orders 
        where o_orderdate >= '1998-07-29'
        group by o_orderdate
        order by o_orderdate        
) cln
on prd.o_orderdate = cln.transaction_date
where cln.transaction_date is not null
group by transaction_date
order by 2

enter image description here

Sql相关问答推荐

基于模式或其他行集的数据复制

将有界时间周期作为阶跃函数,其中周期开始返回1,周期结束返回0

Postgres,使用iLike运算符从json数组中搜索的工作方式与从常规表中搜索不同

如何在SQL Server中列出从当前月份开始的过go 10年中的月份

从日期开始向前填充重复项

基于多列比较连接两个表

如何隐藏聚合JSON数组元素的键

使用拆分器将已分组的不同值连接在一起

每个学校 Select N个最新的行,但跳过同一学生的重复行

除了风格之外,还有什么理由更喜欢简单的CASE WHEN而不是搜索呢?

将最近的结束日期与开始日期相匹配

如何根据创建日期查找两个表中最接近的记录?

特殊条件计算小计

识别SQL Server中的重复数字

如何使用Informix创建一个临时表,将数据从根表导入并使用筛选条件

根据开始时间和结束时间计算has_impact字段

更新表 A,然后将新值插入表 B(包含更新内容的历史日志(log))

如何找到特定时间间隔内的最大和最小日期?

包含多行的 SQL 查询

从多个连接返回 1 行到同一个表 - SQL Server