Oracle SQL查询每组中某个字段最大的那笔资料

时间:2021-07-29 14:27:16

实例说明: table 中的资料如图所示:

Oracle SQL查询每组中某个字段最大的那笔资料

需要查询出所有part_no,ver 值更大的那笔资料。以上图的table数据为例,需要SQL语句一次性查询出part_no: 0899020234 ver:2 和part_no:0805260612 var:2 的这两笔数据。

有两种方法可以实现:

第一种,用 max(VER) over( partition by PART_NO) xx  方法,先以part_no 做为区分(相当于group by part_no),在从区分后的数据中得到最大的VER,给它命名 xx 字段。

在外层通过比对VER字段和xx字段即可.

具体SQL 如下:

select 
PART_NO,N_WEIGHT_U,N_WEIGHT_UNIT, N_RATE,VER
from (
SELECT DISTINCT PART_NO,
N_WEIGHT_U,
N_WEIGHT_UNIT,
N_RATE,
VER,
max(VER) over( partition by PART_NO) xx
FROM EC_SP_PART_APPLY
)
where VER = xx
查询结果:

Oracle SQL查询每组中某个字段最大的那笔资料

第二种方法比较笨一点,但是更容易懂,看下SQL语句就懂了。

select 
c.part_no,
c.N_WEIGHT_U,
c.N_WEIGHT_UNIT,
c.N_RATE,
c.VER
from
(select part_no, max(ver) as ver
from (SELECT DISTINCT PART_NO,N_WEIGHT_U,N_WEIGHT_UNIT,N_RATE,VER FROM EC_SP_PART_APPLY )
group by part_no
) b,EC_SP_PART_APPLY c
where b.part_no = c.part_no
and b.ver = c.ver;

查询结果跟上面的方法完全一样:

Oracle SQL查询每组中某个字段最大的那笔资料