2012-08-24 200 views
2

我有一個訂單數據庫。每個訂單在訂單上可以有多個SKU。同樣,SKU可以附加到多個訂單。每個訂單都有一個存儲創建日期的日期字段。不在日期範圍內

,其存儲該交叉與表1參考以獲得每個訂單的詳細附訂購
  • 表2 =摘要,該目錄訂單ID和發貨日期的所有SKU信息
    • 表1 =明細表

    我試圖找到的是在某個日期之後沒有附加到任何訂單的SKU。換句話說,我需要一份在過去30天內未訂購的SKU清單。

    看起來不是BETWEEN應該可以工作,但它會一直返回在2012年7月21日前下單的SKU。這裏是我正在使用的查詢:

    SELECT DISTINCT table1.sku, table2.ship_date 
    FROM table1, table2 
    WHERE table1.orderID = table2.orderID 
    AND table2.ship_date NOT BETWEEN DATE ('2012-07-21') and DATE('2012-08-23') 
    ORDER BY table1.ship_date ASC; 
    

    任何幫助將不勝感激。

  • 回答

    2

    您需要使用not in和基於它的SKU表:

    SELECT sku 
    FROM sku_table -- the table with the complete list of skus 
    where sku not in (
        -- all skus that were ordered after 2012-07-21 
        SELECT sku 
        from table1 
        WHERE order_date > DATE('2012-07-21') 
        union -- fyi union removes duplicates 
        -- all skus that were shipped after 2012-07-21 
        SELECT table1.sku 
        from table2 
        join table1 on table1.orderID = table2.orderID 
        WHERE table2.ship_date > DATE('2012-07-21') 
    ) 
    

    這個查詢也將返回從未被訂購的SKU。

    +0

    用問題給出的表格,這是你能做的最好的。但是,該查詢給出了在過去30天內尚未訂購的有史以來訂購的SKU清單;可能還有其他SKU從未訂購過(根據定義)在過去30天內未訂購,但它們只出現在定義可用於訂購的SKU的表格中,該表格既不是Table1也不是Table2。 –

    +0

    @JonathanLeffler是的 - 我沒有仔細閱讀這個問題。我認爲'table1'是SKU的列表。我已經編輯了相應的答案 – Bohemian