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

应用排名规则之前按日期排序的SQL排名组,sql,sql-server,sql-server-2008,ranking,Sql,Sql Server,Sql Server 2008,Ranking,当按日期排序时,我试图得到整数组的秩。某些组将具有相同的值,但由其他组分隔。由于这个原因,我不能使用稠密秩,因为它将相同值的整数放在一起。下面10的值将属于同一组的稠密_排名,我希望它们位于第2组和第4组。谢谢你的帮助 | ID | Date | IntValue | DesiredRankResult | | 1 | 01 Jan | 10 | 4 | | 1 | 02 Jan | 10 | 4

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

| 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                 |

您可以使用
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;

您使用的是哪种数据库管理系统?博士后?神谕DB2?火鸟?我完全不明白你的逻辑。你能详细说明一下吗?要分配等级,你需要定义一个顺序,在你的例子中,将1月1日和1月2日分组在一起,将1月5日和1月6日分组在一起。在您的示例中,这两个日期都是相邻的。是否总是只对相邻的日期进行分组,或者日期之间是否会有间隔?如果是,差距有多大?每组只有两次约会吗?谢谢你的回复。我们使用的是sql server 2008 r2。我需要的结果必须按日期顺序排列,然后在intValue列上分配排名组,将相同的值分开(在本例中为10)