PL/SQL Return 每个分组只有 1 行

PL/SQL Return Only 1 Row for Each Grouping

我有 table 列出了如下项目。它基本上具有操作编号 (OP_NO),用于说明产品在流程中所处的位置。这些 OP 编号可以是 Released 或 Completed。他们遵循一个过程,如 10 必须在 20 之前发生,20 必须在 30 之前发生等等。但是用户实际上并没有更新所有步骤,所以我们最终完成了一些无序的项目,而前面的步骤并不如下所示(OP30已完成,但 OP 10 和 20 尚未完成)。

我基本上想生成每个 ORDER_ID 的列表,显示每个 ORDER_ID 的最远完成点。我想我可以通过查询 STATUS = 'Completed' 和按 OP_NO Desc 排序来做到这一点。但是我不知道如何为每个 ORDER_ID 只产生 1 个结果。例如在ORDER_ID 345 完成第10步和第20步。我只想 return STEP 20 是它当前所在的位置。我想我可以用 'WHERE ROWNUM <= 1' 做到这一点,但运气不佳。有高手能指点一下吗?

谢谢!

ORDER_ID | ORDER_SEC | ORDER_RELEASE | OP_NO | STATUS     | Description
123        2           3               10      Released     Op10
123        2           3               20      Released     Op20
123        2           3               30      Completed    Op30
123        2           3               40      Released     Op40
345        1           8               10      Completed    Op10
345        1           8               20      Completed    Op20
345        1           8               30      Released     Op30
345        1           8               40      Released     Op40

如果我理解正确你想要什么,下面应该满足你的需要。只需将测试 table 替换为您的 table 名称即可。

select * 
from test_table tst 
where status = 'Completed'
and op_no = (select max(op_no) 
             from test_table tst1 
             where tst.order_id = tst1.order_id 
             and status = 'Completed');

根据您的样本数据,这产生了以下结果。

Order_Id  Order_Sec   Order_Release   op_no  Status       Description
123       2           3               30     Completed    Op30
345       1           8               20     Completed    Op20

干杯

肖恩·彼得森