0

我想对具有两列的分区的值进行排名。col1将是关键,并且col2将是一些也将用于ORDER BY. 我只想在col2停止时开始一个新分区。例如,我想做以下事情:

+------+------+------+
| col1 | col2 | rank |
+------+------+------+
| a    |    1 |    1 |
| a    |    2 |    2 |
| a    |    3 |    3 |
| a    |    9 |    1 |
| a    |   10 |    2 |
| b    |    1 |    1 |
| b    |    2 |    2 |
| b    |    8 |    1 |
+------+------+------+

在某处思考 SELECT col1, RANK() OVER (PARTITION BY col1, SOMETHING HERE??? ORDER BY col2 DESC)

有没有人有任何想法?

4

1 回答 1

2

如果我理解正确,您想通过相邻顺序值的“岛”来枚举。您可以通过一个简单的观察来做到这一点:从col2每个组中减去一个序列将是恒定的。所以,让我们使用这个观察:

select t.*,
       row_number() over (partition by col1, grp order by col1) as rnk
from (select t.*,
             (col2 - row_number() over (partition by col1 order by col2)) as grp
      from t
     ) t
于 2018-05-17T18:49:15.997 回答