2

我有一个订单数据库。每个订单可以有多个 SKU。同样,SKU 可以附加到多个订单。每个订单都有一个存储其创建日期的日期字段。

  • 表 1 = 存储附加到订单的所有 SKU 信息的详细信息表
  • 表 2 = 列出订单 ID 和发货日期的摘要,与表 1 交叉引用以获得每个订单的更多详细信息

我要查找的是在特定日期之后未附加到任何订单的 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;

任何帮助将不胜感激。

4

1 回答 1

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。

于 2012-08-24T00:53:19.367 回答