TSQL Challenge 20 - Solution By piotr mis



--piotr_mis_tsqlchallenge_20_v1.sql
;WITH fibo (fib1, fib2) AS
(
   SELECT CAST(0 AS bigint), CAST(1 as bigint)
   UNION ALL
   SELECT fib2, fib1+fib2
   FROM fibo 
   WHERE fib2 < 7540113804746346429
), digits (pattern) AS
(
   SELECT CAST('%00%' AS char(4))
   UNION ALL
   SELECT CAST('%11%' AS char(4))
   UNION ALL
   SELECT CAST('%22%' AS char(4))
   UNION ALL
   SELECT CAST('%33%' AS char(4))
   UNION ALL
   SELECT CAST('%44%' AS char(4))
   UNION ALL
   SELECT CAST('%55%' AS char(4))
   UNION ALL
   SELECT CAST('%66%' AS char(4))
   UNION ALL
   SELECT CAST('%77%' AS char(4))
   UNION ALL
   SELECT CAST('%88%' AS char(4))
   UNION ALL
   SELECT CAST('%99%' AS char(4))
), ord (rn, FiboNumber, NumRepeats) AS
(
   SELECT ROW_NUMBER() OVER(PARTITION BY COUNT(f.fib2) ORDER BY f.fib2) AS rn, f.fib2, COUNT(f.fib2) AS digits
   FROM fibo f INNER JOIN
      digits d ON f.fib2 LIKE d.pattern
   GROUP BY fib2
)
SELECT NumRepeats, FiboNumber
FROM ord
WHERE rn < 6

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.