我一直在努力争取这个,我想我需要一个提示!
我有电子书的 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
答案 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