Sql Oracle秩函数问题

Sql Oracle秩函数问题,sql,oracle,oracle11g,oracle10g,Sql,Oracle,Oracle11g,Oracle10g,我在oracle分析功能中遇到问题 我希望oracle中的排名顺序显示,但需要循环方式。但这种排名应该在一个组中进行。 假设我有10个小组 在10组中,每组必须排到第9位。如果大于9,则秩值必须从1开始,然后结束,直到有多少次如此 emp id date1 date 2 Rank 123 13/6/2012 13/8/2021 1 123 14/2/

我在oracle分析功能中遇到问题

我希望oracle中的排名顺序显示,但需要循环方式。但这种排名应该在一个组中进行。 假设我有10个小组 在10组中,每组必须排到第9位。如果大于9,则秩值必须从1开始,然后结束,直到有多少次如此

emp id      date1               date 2                 Rank
123         13/6/2012           13/8/2021              1
123         14/2/2012           12/8/2014              2
                                                       . 
                                                       .
123         9/10/2013           12/12/2015             9
123         16/10/2013          15/10/2013             1
123         16/3/2014           15/9/2015              2

在上面的例子中,对于empid 123的一组行,我将列组分为两个子组。从1到9依次为一个组,其余行的列组再次从1开始。如何在oracle列组函数中实现这一点。

根据上面Egor Skriptunoff的建议:

select
  empid, date1, date2
, row_number() over(order by date1, date2)             as "rank"
, mod(row_number() over(order by date1, date2)-1, 9)+1 as "cycle_9"
from yourtable
示例结果

| empid |                date1 |                date2 | rn | ranked |
|-------|----------------------|----------------------|----|--------|
| 72232 | 2016-10-26T00:00:00Z | 2017-03-07T00:00:00Z |  1 |      1 |
| 04365 | 2016-11-03T00:00:00Z | 2017-07-29T00:00:00Z |  2 |      2 |
| 79203 | 2016-12-15T00:00:00Z | 2017-05-16T00:00:00Z |  3 |      3 |
| 68638 | 2016-12-18T00:00:00Z | 2017-02-08T00:00:00Z |  4 |      4 |
| 75784 | 2016-12-24T00:00:00Z | 2017-11-18T00:00:00Z |  5 |      5 |
| 72836 | 2016-12-24T00:00:00Z | 2018-09-10T00:00:00Z |  6 |      6 |
| 03679 | 2017-01-24T00:00:00Z | 2017-10-14T00:00:00Z |  7 |      7 |
| 43527 | 2017-02-12T00:00:00Z | 2017-01-15T00:00:00Z |  8 |      8 |
| 03138 | 2017-02-26T00:00:00Z | 2017-01-30T00:00:00Z |  9 |      9 |
| 89758 | 2017-03-29T00:00:00Z | 2018-04-12T00:00:00Z | 10 |      1 |
| 86377 | 2017-04-14T00:00:00Z | 2018-10-07T00:00:00Z | 11 |      2 |
| 49169 | 2017-04-28T00:00:00Z | 2017-04-21T00:00:00Z | 12 |      3 |
| 45523 | 2017-05-03T00:00:00Z | 2017-05-07T00:00:00Z | 13 |      4 |

mod(rank(…)-1,9)+1
@peter你能发送一个关于这个问题的示例查询吗。我已经使用了row_编号来解决你的问题吗?你对这个答案还有疑问吗?若要接受答案“”,请参阅