Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如果状态为X,最近的交货状态为Y,我如何将交货带回?_Sql - Fatal编程技术网

Sql 如果状态为X,最近的交货状态为Y,我如何将交货带回?

Sql 如果状态为X,最近的交货状态为Y,我如何将交货带回?,sql,Sql,我一直在努力,我想我需要一个提示 我有一个电子书的发货表,表中有以下列:目录号、发货日期、状态号 我正试图从产品状态为“4”的“目录号”列中带回所有条目,但仅当目录号的最新交付状态为“1”时 下面是我可能会看到的一本电子书的示例: +---------------+------------------+-----------+ | Delivery_Date | Catalogue_Number | Status_Id | +---------------+------------------+

我一直在努力,我想我需要一个提示

我有一个电子书的发货表,表中有以下列:目录号、发货日期、状态号

我正试图从产品状态为“4”的“目录号”列中带回所有条目,但仅当目录号的最新交付状态为“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”的每个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你,但当我做到时,我会: