对数字的分区进行 sql 编号



我有一组这样的数字

ID
===
1
2
3
1
2
1
1
2
3
4
5
...

我想选择一行,在获取下一个 1 时增加,如下所示

ID    number
===  ========
1        1
2        1
3        1
1        2
2        2
1        3
1        4
2        4
3        4
4        4
5        4

有什么建议吗?

假设您有一个指定排序的列o,那么您可以使用如下所示的自连接:

select d1.o, d1.id, count(*)
from data d1
join data d2 on d1.o >= d2.o and d2.id = 1
group by d1.o, d1.id

DBFiddle DEMO

您可以使用 cte 和窗口函数来解决此问题,如下所示:

DECLARE @t TABLE (ID INT);
INSERT INTO @t VALUES (1),(2),(3),(1),(2),(1),(1),(2),(3),(4),(5);
WITH cte AS(
SELECT ID, ROW_NUMBER() OVER (ORDER BY (SELECT 1)) rn
FROM @t
),
cte1 AS(
SELECT ID, rn, ROW_NUMBER() OVER (ORDER BY rn) rn2
FROM cte
WHERE ID = 1
)
SELECT c.ID, MAX(rn2) OVER (ORDER BY c.rn) rn
FROM cte c
LEFT JOIN cte1 c1 ON c1.rn = c.rn
ORDER BY c.rn

最新更新