--Adán_Bucio_tsqlchallenge_20_v4.sql
WITH FibSerie AS (
SELECT CAST(0 AS BIGINT) AS Pre,
CAST(1 AS BIGINT) AS FiboNumbers,
0 AS NumRepeats,
1 AS n
UNION ALL
SELECT f.FiboNumbers,
f.Pre + f.FiboNumbers,
CAST(CAST(PATINDEX('%00%', CAST(f.Pre + f.FiboNumbers AS VARCHAR(20))) AS BIT) AS INT) +
CAST(CAST(PATINDEX('%11%', CAST(f.Pre + f.FiboNumbers AS VARCHAR(20))) AS BIT) AS INT) +
CAST(CAST(PATINDEX('%22%', CAST(f.Pre + f.FiboNumbers AS VARCHAR(20))) AS BIT) AS INT) +
CAST(CAST(PATINDEX('%33%', CAST(f.Pre + f.FiboNumbers AS VARCHAR(20))) AS BIT) AS INT) +
CAST(CAST(PATINDEX('%44%', CAST(f.Pre + f.FiboNumbers AS VARCHAR(20))) AS BIT) AS INT) +
CAST(CAST(PATINDEX('%55%', CAST(f.Pre + f.FiboNumbers AS VARCHAR(20))) AS BIT) AS INT) +
CAST(CAST(PATINDEX('%66%', CAST(f.Pre + f.FiboNumbers AS VARCHAR(20))) AS BIT) AS INT) +
CAST(CAST(PATINDEX('%77%', CAST(f.Pre + f.FiboNumbers AS VARCHAR(20))) AS BIT) AS INT) +
CAST(CAST(PATINDEX('%88%', CAST(f.Pre + f.FiboNumbers AS VARCHAR(20))) AS BIT) AS INT) +
CAST(CAST(PATINDEX('%99%', CAST(f.Pre + f.FiboNumbers AS VARCHAR(20))) AS BIT) AS INT),
f.n + 1
FROM FibSerie AS f
WHERE f.n < 92
)
SELECT NumRepeats, FiboNumbers
FROM (
SELECT NumRepeats,
FiboNumbers,
ROW_NUMBER() OVER(PARTITION BY NumRepeats ORDER BY FiboNumbers) AS rn
FROM FibSerie AS f
WHERE NumRepeats > 0
) AS seq
WHERE seq.rn <= 5
ORDER BY seq.NumRepeats, seq.FiboNumbers
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.