首页 > 解决方案 > 带有日期列的完全外部自联接

问题描述

我有一个包含每周数据的表,其中有一列用于识别数据在一周内的加载时间。
这是样本数据

====================
Load_Date   |Code
====================
1 Oct 2018  |875465
8 Oct 2018  |875465
15 Oct 2018 |875465

此外,该表包含所有 52 周的数据,因此如果我执行 a DISTINCT Load_Date,它会为我提供 52 行包含每周日期的数据。
我正在尝试将表格与自身连接起来,以便我可以确定周数where Code IS NULL
我尝试形成的查询是

SELECT * FROM 
(--Query to get all distinct weeks
    SELECT DISTINCT LOAD_DATE FROM ztable
) dates
FULL OUTER JOIN 
(
    SELECT DISTINCT CODE, LOAD_DATE
    FROM ztable
) z
    ON z.LOAD_DATE = dates.LOAD_DATE

我也尝试过使用左连接,但每个记录code的数量是表中的行数code,而不是 52行
。例如,如果code有 3 行,那么我将只看到 3 行与此连接。
我错过了什么?

标签: sqlsql-servertsql

解决方案


我认为您正在尝试查找不存在的code/组合。load_date根据您的描述(不是示例代码),我认为这是:

select d.load_date, c.code
from (select distinct load_date from t) d cross join
     (select distinct code from t) c left join
     t
     on d.load_date = t.load_date and c.code = t.code
where t.code is null;

推荐阅读