TSQL Challenge 20 - Solution By jeff schwartzmann



--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.