ORACLE Keep dense_rank

The DENSE_RANK function works return sequence value for the order seqence.

example:

SQL> with t as (
  
2  select 1 mon, 'Jon' name,24 age, 100000 money from dual union all
  
3  select 1'Kim',243230000 from dual union all
  
4  select 1'Jissca',25235556565 from dual
  
5  )
  
6  select mon,name,age,money,dense_rank() over (partition by mon order by money) rank from t;
 
       MON NAME          AGE      
MONEY       RANK
---------- ------ ---------- ---------- ----------
         1 Jon            24     100000          1
         
1 Kim            24    3230000          2
         
1 Jissca         25  235556565          3
 
SQL
>

 The FIRST or LASTfunction can used to return the first or last value for order sequence,

Say we want  to display the min value of money,age,along with the lowest and highest within their monwe may use something like:

SQL> with t as (
  
2  select 1 mon, 'Jon' name,24 age, 100000 money from dual union all
  
3  select 1'Kim',243230000 from dual union all
  
4  select 1'Jissca',25235556565 from dual
  
5  )
  
6  select mon,min(age) keep (dense_rank first order by money)  age, min(moneymoney
  
7    from t
  
8  group by mon;
 
       MON        AGE      
MONEY
---------- ---------- ----------
         1         24     100000
 
SQL
>
原文地址:https://www.cnblogs.com/zeromyth/p/1603702.html