нумерация разделов номеров - PullRequest
0 голосов
/ 17 мая 2018

У меня есть такой набор чисел

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 голосов
/ 17 мая 2018

Вы можете решить эту проблему с помощью функций 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
0 голосов
/ 17 мая 2018

Если у вас есть столбец 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...