oracle分组统计查询之后,获取数量最大的记录


TOTAL_SHARE_HIS表的结构

根据 cust_acco , prd_code,  prd_code_batch 三个字段分组后查询出last_modify_date 最大的一条记录:

select * from
(select  a.*,
row_number() over (partition by a.cust_acco, a.prd_code,a.prd_code_batch order by  a. last_modify_date desc)  as row_num
from total_share_his a )
where row_num = 1;
备注:row_numk=2 就是第二条记录,row_numk between 1 and 5  灵活性比较大。
因为select中字段必须和group by中的对应或者是租函数否则报错,所以如果不用查出
total_share_his 所有字段可以用下列语句
select   
 a.cust_acco, a.prd_code,a.prd_code_batch ,max(
a. last_modify_date
) from  
total_share_his a group by 
a.cust_acco,a.prd_code,a.prd_code_batch 

或者
select t.* from total_share_his  t
       inner join   (select tsh.cust_acco,tsh.prd_code, tsh.prd_code_batch,max(tsh.last_modify_date)  max_date
                                          from total_share_his tsh
                                          where tsh.last_modify_date <=20140825
                                          group by tsh.cust_acco,  tsh.prd_code, tsh.prd_code_batch ) a 
       on t.cust_acco=a. cust_acco 
               and   t.prd_code=a. prd_code
               and   t.prd_code_batch=a. prd_code_batch
               and   t.
last_modify_date
=a. 
 
  
max_date



你可能感兴趣的:(oracle)