TSQL Challenge 14 - Solution by Adam Machanic (1)



DECLARE @t TABLE (Data CHAR(36) NOT NULL PRIMARY KEY)

INSERT @t (Data) SELECT '9992EDC6-D117-4DEE-B410-4E5FAE46AE97'
INSERT @t (Data) SELECT '0BFC936B-BD9A-4C6A-AFB2-CF3F1752F8B1'
INSERT @t (Data) SELECT '4A73E7EB-7777-4A04-9258-F1E75097977C'
INSERT @t (Data) SELECT '5AAF477C-274D-400D-9067-035968F33B19'
INSERT @t (Data) SELECT '725DA718-30D0-44A9-B36A-89F27CDFEEDE'
INSERT @t (Data) SELECT '8083ED5A-D3B9-4694-BB04-F0B09C588888'

;WITH
x1 (n) AS 
(
	SELECT 0 UNION ALL SELECT 1 UNION ALL 
	SELECT 2 UNION ALL SELECT 3 UNION ALL 
	SELECT 4 UNION ALL SELECT 5
),
x2 (n) AS
(
	SELECT (a.n * 6) + b.n + 1
	FROM x1 a, x1 b
)
SELECT
	t.Data,
	p.Char,
	p.Pos,
	p.Len
FROM @t AS t
CROSS APPLY
(
	SELECT
		z.*,
		MAX(z.Len) OVER () AS MaxLen
	FROM
	(
		SELECT
			y.Char,
			MIN(y.Number) AS Pos,
			COUNT(*) AS Len
		FROM
		(
			SELECT
				x.*,
				(
					x.Number - 
					DENSE_RANK() OVER
					(
						PARTITION BY
							x.Char
						ORDER BY
							x.Number
					)
				) * ASCII(x.Char) AS CharGroup
			FROM
			(
				SELECT 
					SUBSTRING(t.Data, w.Number, 1) AS Char,
					w.Number
				FROM
				(
					SELECT
						x2.n AS Number
					FROM x2
				) AS w
			) AS x
		) AS y
		GROUP BY
			y.Char,
			y.CharGroup
		HAVING
			COUNT(*) > 1
	) AS z
) AS p
ORDER BY
	MaxLen DESC,
	Pos