SQL 如何创建一个计数,在一定行数后移动到下一个数字,然后循环返回重新开始

SQL how to create a count that moves to the next number after a certain number of rows and then loops back to start over

我需要能够创建一个计数最多为 3 的列,但在重新开始之前会每次提供 3 次数字 1-3。

我下面的当前代码最多只能数到 3 并重新开始。我需要它对每个数字计数 3 次然后重新开始

Select personid, taskid, 1 + ( (row_number() over (order by personid) - 1) % 3) AS taskNumber2 from taskTable

Table 在数据库中:

Personid taskid
1        1 
1        2
2        3
2        4
2        5
3        6
4        7
4        8
5        9
5        10
5        11

预期结果:

Personid taskid numberCount
1        1      1
1        2      1
2        3      1
2        4      2
2        5      2
3        6      2
4        7      3
4        8      3
5        9      3
5        10     1
5        11     1

您可以使用row_number来确定您的价值。设行号为x。由于您要重复第 9 个条目,因此取模 9。为了更容易计算,在此之前减去 1。所以现在 0-2 -> 1、3-5 -> 2、6-8 -> 3。因此除以 3(整数除法)并加 1。

SELECT personid, taskid,
    ((row_number() OVER (ORDER BY personid) - 1) % 9) / 3 + 1 AS taskNumber2
FROM taskTable
ORDER BY personid

另请注意,我在整个语句中添加了与 window 函数中相同的 ORDER BY 子句,从而确保正确排序(至少如果此排序没有歧义,例如它是唯一的,也许是主键)