sql server. Посчитать сколько раз подряд встречается символ в строке

Допустим есть число 144578444, нужно вывести значение максимальной последовательности цифры 4, то есть 3.


Ответы (1 шт):

Автор решения: Akina
WITH 
cte1 AS (  -- исходное число
  SELECT CAST(14455578444 AS BIGINT) AS data  
),
cte2 AS (  -- делим на отдельные цифры
  SELECT CAST(data / 10 AS BIGINT) AS data, data % 10 AS digit, LEN(CAST(data AS CHAR)) AS position
  FROM cte1
  UNION ALL
  SELECT data / 10, data % 10, position - 1
  FROM cte2
  WHERE data > 0
),
cte3 AS (  -- делим на слитные группы
  SELECT *,
         ROW_NUMBER() OVER (ORDER BY position) rn1,
         ROW_NUMBER() OVER (PARTITION BY digit ORDER BY position) rn2
  FROM cte2
)
  -- считаем и выводим сведения о самых длинных группах
SELECT TOP 1 WITH TIES 
       digit, MIN(position) position, COUNT(*) amount
FROM cte3
GROUP BY digit, (rn1 - rn2)
ORDER BY COUNT(*) DESC
digit position amount
5 4 3
4 9 3

fiddle

→ Ссылка