不在日期范围内

时间:2012-08-24 00:39:43

标签: sql date range informix

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

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

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

非常感谢任何帮助。

1 个答案:

答案 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。