sql编号为Numbers的分区

时间:2018-05-17 06:19:20

标签: sql sql-server tsql

我有一组像这样的数字

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

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

假设您有一个指定排序的列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

答案 1 :(得分:-1)

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

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