--jeff_schwartzmann_tsqlchallenge_20.sql
WITH CTE1(n, f, f1)
AS (
SELECT CONVERT(BIGINT, 1),
CONVERT(BIGINT, 0),
CONVERT(BIGINT, 1)
UNION ALL
SELECT n + 1,
f + f1,
f
FROM CTE1
WHERE n < 93
),
CTE2
AS
(
SELECT f as FiboNumber,
CONVERT(VARCHAR(MAX), f) AS sFiboNumber
FROM CTE1
),
CTE3
AS
(
SELECT FiboNumber,
CASE WHEN PATINDEX('%00%', sFiboNumber) > 0 THEN 1 ELSE 0 END +
CASE WHEN PATINDEX('%11%', sFiboNumber) > 0 THEN 1 ELSE 0 END +
CASE WHEN PATINDEX('%22%', sFiboNumber) > 0 THEN 1 ELSE 0 END +
CASE WHEN PATINDEX('%33%', sFiboNumber) > 0 THEN 1 ELSE 0 END +
CASE WHEN PATINDEX('%44%', sFiboNumber) > 0 THEN 1 ELSE 0 END +
CASE WHEN PATINDEX('%55%', sFiboNumber) > 0 THEN 1 ELSE 0 END +
CASE WHEN PATINDEX('%66%', sFiboNumber) > 0 THEN 1 ELSE 0 END +
CASE WHEN PATINDEX('%77%', sFiboNumber) > 0 THEN 1 ELSE 0 END +
CASE WHEN PATINDEX('%88%', sFiboNumber) > 0 THEN 1 ELSE 0 END +
CASE WHEN PATINDEX('%99%', sFiboNumber) > 0 THEN 1 ELSE 0 END AS NumRepeats
FROM CTE2
),
CTE4
AS
(
SELECT ROW_NUMBER() OVER (PARTITION BY NumRepeats ORDER BY FiboNumber) as RowNumber,
NumRepeats,
FiboNumber
FROM CTE3
)
SELECT NumRepeats, FiboNumber
FROM CTE4
WHERE NumRepeats > 0 AND RowNumber <= 5
ORDER BY NumRepeats, FiboNumber
Did you find something incorrect/wrong with this solution? Take a few seconds to Report It.
Did you understand how this solution work? If you find it difficult to understand, you can Request an Explanation or you can Write an explanation to help others better understand this solution.