我有一个订单数据库。每个订单可以在订单上有多个SKU。同样,SKU可以附加到多个订单。每个订单都有一个日期字段,用于存储创建日期。
我想要找的是在特定日期之后没有附加到任何订单的SKU。换句话说,我想要一个在过去30天内没有订购的SKU列表。
似乎NOT 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;
非常感谢任何帮助。
答案 0 :(得分: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。