首页 > 解决方案 > SQL 帮助 - 异常报告

问题描述

我有一个公司表(CompanyID、CompanyName)、日期表(Datekey int、date、isTradingHoliday 0/1)、事实表(id、datekey、c​​ompanyID、StockClosePrice)

我需要一份异常报告。对所有公司的预期,在所有交易日,都会有一个 StockClosePrice。我需要找到我没有数据的交易日的哪个日期和哪些公司。

所以基本上,我需要帮助来编写一个查询来查找 2019 年的哪些日子和哪些公司我在事实表中没有数据。

标签: sqlsql-servertsqldatejoin

解决方案


如果我正确地关注了你,你可以交叉加入公司和日期,然后在非交易假期过滤“缺失”的事实not exists

select c.*, d.*
from companies c
cross join dates d 
where 
    d.isTradingHoliday = 0
    and not exists (
        select 1 from facts f where f.datekey = d.datekey and f.companyID = c.companyID
    )

推荐阅读