廢話不說直接粘代碼:
select * from (
select p.rn ,max(p.rn) over(partition by JXSDM) as rn_max, JXSDM,JXSMC,QKID,QKXM,QKSJH,QKZJH,QKZZMC,QKTYSHXYDM,SFEWGKGS,SBZJLX,
FDSYR,FRZJH,JYCZ,CZZJH,
CZSJH,CLVIN,CLZDXSRQ,CPH,YSHY,ZYYSHW,MZZZ from
(select row_number() over(partition by a.JXSDM order by a.JXSDM asc) as rn,a.JXSDM,a.JXSMC,a.QKID,a.QKXM,a.QKSJH,a.QKZJH,a.QKZZMC,a.QKTYSHXYDM,a.SFEWGKGS,a.SBZJLX,a.FDSYR,a.FRZJH,a.JYCZ,a.CZZJH,
a.CZSJH,a.CLVIN,a.CLZDXSRQ,a.CPH,a.YSHY,a.ZYYSHW,a.MZZZ
from JFQKFX a inner join CD_CUSTOMERATTACHMENT b on a.QKID = b.VKHID where to_char(to_date(CLZDXSRQ,'yyyy-MM-dd'),'yyyy-mm') = to_char(add_months(sysdate,-1), 'yyyy-mm') group by a.JXSDM,a.JXSMC,a.QKID,a.QKXM,a.QKSJH,a.QKZJH,a.QKZZMC,a.QKTYSHXYDM,a.SFEWGKGS,a.SBZJLX,a.FDSYR,a.FRZJH,a.JYCZ,a.CZZJH,
a.CZSJH,a.CLVIN,a.CLZDXSRQ,a.CPH,a.YSHY,a.ZYYSHW,a.MZZZ)p ) where rn/rn_max <=0.1
解決問題的思路:在最內層獲取子集sql的語句中除rn字段外,將其他所有字段用group by 函數進行分組。查詢字段的時候不要用a.*,要查詢具體的字段。主要應用到的oracle函數:
1.row_number() over(partition by a.JXSDM order by a.JXSDM asc),意爲根據 a表中的JXSDM進行分組並排序,然後給每一行數據返回一個行號。