2016-06-13 12 views
0

SQL Server 2012を使用して、毎日4行のデータをテーブルに挿入するスクリプトがあります。行のSQL Server:データが欠落している日付範囲の間のデータを選択

Complete Data

時には、1つ以上のソースデータが不完全であるとして挿入されていない:データは次のようになります。これは、次のようになります - 2番目の列はcommodityIDと呼ばれている:

Missing Data

つ以上の行が欠落している可能性があり時間があります。

私はどのデータが欠落しているかを示すクエリを作成しようとしています。そのため、上記の例ではcommodityID = 2になります。私は、以下のクエリで使用するカレンダー(すべての日付をリストにする)テーブルである別のテーブルを持っています。

SELECT * 
FROM [Calendar] 
WHERE (NOT EXISTS (SELECT ID, CommodityID, Price, DateEntered 
        FROM Spectron_DailyPricing 
        WHERE (CONVERT(date, DateEntered) = Calendar.date))) 
        AND (date BETWEEN '2015-05-14' AND dateadd(day, -1,GETDATE())) 
ORDER BY date asc 

私はすべてのデータに目を通すと、不足している日付とcommodityIDが表示されますSQLクエリを実行できるようにしたいです。したがって、上記の例では次のようになります。私のデータは数年にわたり、多数の結果が存在することになる奇数不足している行があるので

example result

+0

正確には何ですか?あなたは、デモの出力を共有していただけますか?または、あなたが望むものを正確に説明しますか? –

答えて

2
WITH 
    CTE_Numbers AS (
     SELECT * FROM (VALUES (1),(2),(3),(4)) AS a(CommodityID)), 
    CTE_Calendar AS (
     SELECT * 
     FROM [Calendar] c 
     CROSS JOIN CTE_Numbers n 
     WHERE c.date BETWEEN '2015-05-14' AND dateadd(day, -1,GETDATE())) 
SELECT * 
FROM CTE_Calendar c 
LEFT JOIN Spectron_DailyPricing s 
    ON c.CommodityID = s.CommodityID 
    AND c.date = CONVERT(date, s.DateEntered) 
WHERE 
    s.CommodityID IS NULL 
ORDER BY c.date asc 
関連する問題