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 |