PL / SQL每个分组仅返回1行

时间:2015-02-17 21:58:28

标签: plsql

我的表格列出了如下所示的项目。它基本上具有操作号(OP_NO),用于指示产品在过程中的位置。这些OP编号可以是已发布或已完成。他们遵循一个过程,因为10必须在20之前发生,20必须在30之前发生等。但是用户不会更新现实中的所有步骤,所以我们最终得到的一些项目无序完成,而前面的步骤不是如下所示(OP30完成但OP 10和20不是)。

我基本上想要生成每个ORDER_ID的列表,显示每个ORDER_ID的最远完成点。我想我可以通过查询STATUS ='已完成'来做到这一点。和按OP_NO描述排序。但是,我无法弄清楚如何为每个ORDER_ID仅生成1个结果。例如,在ORDER_ID 345中完成了步骤10和20。我只想回到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

1 个答案:

答案 0 :(得分:0)

如果我理解你想要的东西,下面应该做你需要的。只需用表名替换测试表即可。

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

干杯

肖恩彼得森