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)
;
我总是从这个网站收到非常有用的提示,我非常感谢所有这些,所以我会再次试试运气!
我正在尝试在 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)
;