0

我一直在努力解决这个问题,我想我需要一个提示!

我有一个电子书的delivery_table,在这个表中有以下列:catalogue_number、delivery_date、status_id

我正在尝试从 product_status 为“4”的列catalogue_number中取回所有条目,但只有在最近交付的 catalogue_number 处于状态“1”时

这是我可能会看到的特定电子书的示例:

+---------------+------------------+-----------+
| Delivery_Date | Catalogue_Number | Status_Id |
+---------------+------------------+-----------+
| 12/02/2012    | ABA00001         | 3         |
+---------------+------------------+-----------+
| 01/02/2012    | ABA00001         | 1         |
+---------------+------------------+-----------+
| 20/01/2012    | ABA00001         | 4         |
+---------------+------------------+-----------+
| 18/01/2012    | ABA00001         | 4         |
+---------------+------------------+-----------+
| 10/01/2012    | ABA00001         | 3         |
+---------------+------------------+-----------+
| 01/01/2012    | ABA00001         | 3         |
+---------------+------------------+-----------+

从上到下的第二个交付处于状态 1(已摄取),但早期交付处于状态“4”(错误)我想在这种情况下将每个猫号恢复为状态“4”。

我猜这将是某种嵌套查询场景,但我正在努力思考查询需要做什么的逻辑!

在此先感谢您的帮助!

我正在使用 SQL Microsoft Server 2008

4

1 回答 1

2

您可以使用CTE(通用表表达式) - 这将定义具有 1 状态的订单子集,然后您可以加入您的初始查询,例如

with Order1Statuses as (
  select Catalogue_number,
         max(Delivery_date) as status1date,
  from delivery_table
  where status_id = 1
  group by catalogue_number
)
select t4.Catalogue_number
from delivery_table t4 inner join Order1Statuses t1 on 
    t4.catalogue_number = t1.catalogue_number 
    and t4.delivery_date < t1.status1date 
    and t4.status_id = 4
于 2012-05-28T14:59:28.753 回答