应用排名规则之前按日期排序的SQL排名组

时间:2017-06-27 20:30:38

标签: sql sql-server sql-server-2008 ranking

按日期排序时,我试图获得整数组的排名。某些组具有相同的值,但由其他组分隔。出于这个原因,我不能使用DENSE_RANK,因为它将相同值的整数放在一起。下面的10个值将属于DENSE_RANK中的同一组,我希望它们在排名第2组和第2组中。谢谢你的帮助。

| 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 个答案:

答案 0 :(得分: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;