2017-08-03 27 views
0

我感到困惑DENSE_RANK函數DENSE_RANK()誘騙甲骨文

所以我有這樣

select ID, date 
From TABLE1 
order by date 

一個代碼,以便它執行這樣

ID DATE 
1 10/25/2016 
1 10/23/2015 
1 10/22/2014 
2 10/11/2015 
2 5/24/2014 
2 5/21/2014 
2 3/23/2013 
3 10/21/2016 
3 9/20/2015 

我的代碼是

select ID, Extract(MONTH FROM DATE), DENSE_RANK() OVER (PARTITION BY ID,Extract(MONTH FROM DATE order by DATE) rank 
FROM TABLE 

它顯示

ID DATE RANK 
    1 10 1 
    1 10 2 
    1 10 3 
    2 10 1 
    2 5 1 
    2 5 2 
    2 3 1 
    3 10 1 
    3 9 2 

但我想類似下面

ID DATE RANK 
    1 10 1 
    1 10 1 
    1 10 1 
    2 10 1 
    2 5 2 
    2 5 2 
    2 3 3 
    3 10 1 
    3 9 2 

顯示哪能代碼來執行上述

謝謝你這麼多

+0

你是否真的想''通過'分區'[提取月份的代碼],或者'通過'排序?只有當行由'order by'值綁定時,'dense_rank'纔會顯示相同的值。 – mathguy

回答

3

你要按月訂購(以降序排列)而非由它們分區:

SELECT ID, 
     Extract(MONTH FROM "DATE"), 
     DENSE_RANK() OVER (PARTITION BY ID 
          ORDER BY Extract(MONTH FROM "DATE") DESC) rank 
FROM your_table