Sql 如果状态为X,最近的交货状态为Y,我如何将交货带回?
我一直在努力,我想我需要一个提示 我有一个电子书的发货表,表中有以下列:目录号、发货日期、状态号 我正试图从产品状态为“4”的“目录号”列中带回所有条目,但仅当目录号的最新交付状态为“1”时 下面是我可能会看到的一本电子书的示例:Sql 如果状态为X,最近的交货状态为Y,我如何将交货带回?,sql,Sql,我一直在努力,我想我需要一个提示 我有一个电子书的发货表,表中有以下列:目录号、发货日期、状态号 我正试图从产品状态为“4”的“目录号”列中带回所有条目,但仅当目录号的最新交付状态为“1”时 下面是我可能会看到的一本电子书的示例: +---------------+------------------+-----------+ | Delivery_Date | Catalogue_Number | Status_Id | +---------------+------------------+
+---------------+------------------+-----------+
| 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”的每个cat编号都带回来,在这种情况下
我猜这将是某种嵌套查询场景,但我正在努力思考查询需要做什么的逻辑
提前感谢您的帮助
我使用的是SQL Microsoft Server 2008您可以使用-这将定义具有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
非常感谢!这看起来正是我所需要的,只是我得到了一个错误:>列“delivery_table.strCatalogueNumber”在select列表中无效,因为它不包含在聚合函数或GROUP BY子句中。我尝试过对结果进行各种分组/排序,但我无法克服此错误…啊,是的-代码未经测试,但现在应该可以工作了,错过了分组-我更新了答案。我试图在底部查询中添加group子句!非常感谢。第二行也不需要逗号,但我想这只是一个输入错误另外,我还没有足够的声誉来+1你,但当我做到时,我会: