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



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

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

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

数据库中的表:

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子句,从而确保正确的排序(至少如果此排序不是模棱两可的,例如它是唯一的,也许是主键(

相关内容

  • 没有找到相关文章

最新更新