2017-06-27 88 views
0

我試圖在按日期排序時對整數組進行排名。其中一些團體將具有相同的價值,但被其他團體分隔。出於這個原因,我不能像使用相同值的整數一樣使用DENSE_RANK。以下10的值將屬於DENSE_RANK中的同一組,我希望他們在排名組2中& 4.感謝您的幫助。按排序規則應用前按日期排序的SQL排序組

| ID | Date | IntValue | DesiredRankResult | 
| 1 | 01 Jan | 10  | 4     | 
| 1 | 02 Jan | 10  | 4     | 
| 1 | 03 Jan | 20  | 3     | 
| 1 | 04 Jan | 20  | 3     | 
| 1 | 05 Jan | 10  | 2     | 
| 1 | 06 Jan | 10  | 2     | 
| 1 | 07 Jan | 30  | 1     | 
+1

您正在使用哪些DBMS? Postgres的?甲骨文? DB2?火鳥? –

+0

我完全不理解你的邏輯。你能詳細說明嗎? –

+0

要分配排名,您需要定義一個排序,在您的示例中,將組合1月1日和1月2日,以及將1月5日和1月6日組合在一起。在你的例子中,這兩個日期都是相鄰的。總是隻有相鄰的日期會被分組,或者日期間會有差距嗎?如果是這樣,差距有多大?每組中只有兩個日期嗎? –

回答

0

您可以使用lead()和累計和來做到這一點。我認爲它看起來像這樣:

select t.*, 
     sum(case when next_intval = intval then 0 else 1 end) over (partition by id order by date desc) as DesiredRankResult 
from (select t.*, 
      lead(intval) over (partition by id order by date) as next_intval 
     from t 
    ) t;