Plsql PL/SQL对于每个分组只返回一行

Plsql PL/SQL对于每个分组只返回一行,plsql,Plsql,我有一张表,上面列出了如下项目。它基本上有操作编号(OP_NO),告诉产品在流程中的位置。这些OP编号可以发布或完成。它们遵循一个过程,如10必须在20之前发生,20必须在30之前发生等。然而,用户实际上并没有更新所有步骤,因此我们最终完成了一些无序的项目,而前面的步骤没有如下所示(OP30已完成,但OP 10和20未完成) 我基本上希望生成每个订单ID的列表,显示每个订单ID的最远完成点。我想我可以通过查询STATUS='Completed'并按OP_NO Desc排序来实现这一点。但是我不知

我有一张表,上面列出了如下项目。它基本上有操作编号(OP_NO),告诉产品在流程中的位置。这些OP编号可以发布或完成。它们遵循一个过程,如10必须在20之前发生,20必须在30之前发生等。然而,用户实际上并没有更新所有步骤,因此我们最终完成了一些无序的项目,而前面的步骤没有如下所示(OP30已完成,但OP 10和20未完成)


我基本上希望生成每个订单ID的列表,显示每个订单ID的最远完成点。我想我可以通过查询STATUS='Completed'并按OP_NO Desc排序来实现这一点。但是我不知道如何为每个订单ID只生成一个结果。例如,在订单ID 345中,步骤10和20已经完成。我只想返回步骤20当前的位置。我想我可以用“WHERE ROWNUM来实现这一点,如果我正确理解了你想要什么,下面的内容应该满足你的需要。只需将测试表替换为表名即可

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
干杯


肖恩·彼得森(Shaun Peterson)

为什么你认为你需要一个存储过程?这真的很有帮助!谢谢肖恩!
Order_Id  Order_Sec   Order_Release   op_no  Status       Description
123       2           3               30     Completed    Op30
345       1           8               20     Completed    Op20