实例说明: table 中的资料如图所示:
需要查询出所有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
查询结果:
第二种方法比较笨一点,但是更容易懂,看下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;
查询结果跟上面的方法完全一样: