我的表格列出了如下所示的项目。它基本上具有操作号(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
答案 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
干杯
肖恩彼得森