Oracle SQL: WHERE 子句中的 MAX 函数

Oracle SQL: MAX function in WHERE clause

我总是从这个网站收到非常有用的提示,我非常感谢所有这些,所以我会再次试试运气!

我正在尝试在 where 子句中使用 max 函数来获取变更单的最新版本。 所以在 table 中,我有字段 order_no、line_no、chg_order_no(修订号)和数量。因此,每当用户修改采购订单时,系统都会创建新的变更订单,并且 order_no 和 line_no 将保持不变,但 chg_order_no 和数量会发生变化。请注意,chg_order_no 可以是从 1 到例如100

order_no line_no chg_order_no amount
order1 1 1 100
order2 1 1 250
order1 1 2 300

现在我只想获取以下行:

order_no line_no chg_order_no amount
order2 1 1 250
order1 1 2 300

我尝试使用以下 select 查询,但它似乎不适用于所有订单

SELECT co.order_no, co.chg_order_no,co.line_no, co.amount 
FROM CHANGE_ORDER co 
WHERE co.chg_order_no = (select MAX(chg_order_no) from CHANGE_ORDER)

提前致谢

可以使用这个方法,但是需要关联子查询:

SELECT co.order_no, co.chg_order_no,co.line_no, co.amount 
FROM CHANGE_ORDER co 
WHERE co.chg_order_no = (select MAX(co2.chg_order_no)
                         from CHANGE_ORDER co2
                         where co.order_no = co2.order_no
                        );

您的版本 returns 超过所有数据的最大值 chg_order_no。但是,您只需要每个 order_no.

有很多方法可以做到这一点。但是 Oracle 有新的功能可以让你避免子查询:

select co.*
from change_order co
order by row_number() over (partition by order_no order by chg_order_no desc)
fetch first 1 row with ties;

在子查询中仅添加此 where 子句:where order_no = co.order_no

SELECT co.order_no, co.chg_order_no,co.line_no, co.amount 
FROM CHANGE_ORDER co 
WHERE co.chg_order_no = (select MAX(chg_order_no) from CHANGE_ORDER where order_no = co.order_no)
;