如何恢复状态为X且最近交货状态为Y的交货?

时间:2012-05-28 14:53:05

标签: sql

我一直在努力争取这个,我想我需要一个提示!

我有电子书的 delivery_table ,在此表格中有以下列: catalogue_number,delivery_date,status_id

我正在尝试从 catalogue_number 列返回所有条目,其中product_status为'4',但仅当最近交付的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

1 个答案:

答案 0 :(得分:2)

您可以使用CTE (Common Table Expression) - 这将定义具有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