TSQL Challenge 20 - Solution By reich jesse



--reich_jesse_tsqlchallenge_20.sql
WITH Fibo AS (
SELECT 
  1 AS Id, 
  CONVERT(bigint, 0) AS PrevFibo,
  CONVERT(bigint, 1) AS Fibo,
  0 AS NumRepeats
UNION ALL
SELECT
  Id + 1,
  Fibo,
  PrevFibo + Fibo,
  CASE WHEN PATINDEX('%00%', CONVERT(varchar(20), PrevFibo + Fibo)) > 0 THEN 1 ELSE 0 END + 
  CASE WHEN PATINDEX('%11%', CONVERT(varchar(20), PrevFibo + Fibo)) > 0 THEN 1 ELSE 0 END + 
  CASE WHEN PATINDEX('%22%', CONVERT(varchar(20), PrevFibo + Fibo)) > 0 THEN 1 ELSE 0 END + 
  CASE WHEN PATINDEX('%33%', CONVERT(varchar(20), PrevFibo + Fibo)) > 0 THEN 1 ELSE 0 END + 
  CASE WHEN PATINDEX('%44%', CONVERT(varchar(20), PrevFibo + Fibo)) > 0 THEN 1 ELSE 0 END + 
  CASE WHEN PATINDEX('%55%', CONVERT(varchar(20), PrevFibo + Fibo)) > 0 THEN 1 ELSE 0 END + 
  CASE WHEN PATINDEX('%66%', CONVERT(varchar(20), PrevFibo + Fibo)) > 0 THEN 1 ELSE 0 END + 
  CASE WHEN PATINDEX('%77%', CONVERT(varchar(20), PrevFibo + Fibo)) > 0 THEN 1 ELSE 0 END + 
  CASE WHEN PATINDEX('%88%', CONVERT(varchar(20), PrevFibo + Fibo)) > 0 THEN 1 ELSE 0 END + 
  CASE WHEN PATINDEX('%99%', CONVERT(varchar(20), PrevFibo + Fibo)) > 0 THEN 1 ELSE 0 END AS NumRepeats
FROM Fibo
WHERE Id < 92
),
FiboRanked AS (
  SELECT
    NumRepeats,
    Fibo AS FiboNumber,
    ROW_NUMBER() OVER (PARTITION BY NumRepeats ORDER BY Fibo) AS Ranking
  FROM Fibo
  WHERE NumRepeats > 0
) 
SELECT
  NumRepeats,
  FiboNumber
FROM FiboRanked
WHERE Ranking <= 5


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.