1. 程式人生 > >oracle的多欄位排序去重Row Number Over Partition By A B Order By C

oracle的多欄位排序去重Row Number Over Partition By A B Order By C

               

今天遇到需要在多條有重複欄位的記錄中選取修改日期最接近現在的欄位,如下:

我想要選取CPDM,FBQD相同,KSRQ離現在最近的那條記錄,選出的記錄應該為1、2、3,而4、5、6、7應該捨棄掉。

我們使用這條語句:

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

得到的結果為:

再用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')