TSQL Challenge 14 - Solution by Aurelien Verla (2)



-- aurelien_verla_tsqlchallenge_14_2

DECLARE @t TABLE (Data VARCHAR(40) )

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 RESULTS ([D], [P], [C], [L]) AS (
	SELECT 
		[D], 
		MIN([P]), 
		[C], 
		MAX([P]) - MIN([P]) + 1
	FROM (
		SELECT
			((ROW_NUMBER() OVER(PARTITION BY T2.[Data] ORDER BY T2.[Data], T1.[Number]) + 1) / 2) AS 'G',
			T2.[Data] AS 'D',
			T1.[number] AS 'P',
			SUBSTRING(T2.[Data], T1.[number], 1) AS 'C'
		FROM [master].[dbo].[spt_values] AS T1, @t AS T2
		WHERE T1.[type] = 'P' AND T1.[number] BETWEEN 1 AND LEN(T2.[Data])
		AND (
				(
					SUBSTRING(T2.[Data], T1.[number], 1) <> SUBSTRING(T2.[Data], T1.[number] - 1, 1) 
					AND SUBSTRING(T2.[Data], T1.[number], 1) = SUBSTRING(T2.[Data], T1.[number] + 1, 1)
				)
			OR	(
					SUBSTRING(T2.[Data], T1.[number], 1) = SUBSTRING(T2.[Data], T1.[number] - 1, 1) 
					AND SUBSTRING(T2.[Data], T1.[number], 1) <> SUBSTRING(T2.[Data], T1.[number] + 1, 1)
				)
		)
	) AS T
	GROUP BY [D], [G], [C]
), ORDERS ([D], [L], [C]) AS (
	SELECT
		[D],
		MAX([L]),
		COUNT([D])
	FROM [RESULTS]
	GROUP BY [D]
)
SELECT
	T1.[D] AS 'Data',
	T1.[C] AS 'Char',
	T1.[P] AS 'Pos',
	T1.[L] AS 'Len'
FROM [RESULTS] AS T1, [ORDERS] AS T2
WHERE T1.[D] = T2.[D]
ORDER BY T2.[L] DESC, T2.[C] DESC, T1.[D], T1.[P]

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.