oracle的多字段排序去重Row_Number() Over(Partition By A, B Order By C Desc)

今天遇到需要在多条有重复字段的记录中选取修改日期最接近现在的字段,如下:

oracle的多字段排序去重Row_Number() Over(Partition By A, B Order By C Desc)_第1张图片

我想要选取CPDM,FBQD相同,KSRQ离现在最近的那条记录,选出的记录应该为1、2、3,而4、5、6、7应该舍弃掉。

我们使用这条语句:

Row_Number() Over(Partition By Cpdm, Fbqd Order By Ksrq Desc)

得到的结果为:

oracle的多字段排序去重Row_Number() Over(Partition By A, B Order By C Desc)_第2张图片

再用Rk = 1做个限定,就可以得出最终结果:


完整的SQL语句为:

Select b.*,
       b.Fbqd,
       b.Qzsm
  From (Select Row_Number() Over(Partition By Cpdm, Fbqd Order By Ksrq Desc) Rk,
               Cpid,
               Cpdm,
               Djxh,
               Djmc,
               Fbqd,
               Djlx,
               Ksrq,
               Zzrq,
               Dyzq,
               Dj,
               Sfkysy,
               Syzq
          From t_biao) b
 Where b.cpdm = 'ZX0001'
   and b.Rk = 1
   and b.fbqd not in ('Z')



你可能感兴趣的:(数据库)