Here is a demo. It uses some solution on the island, and then an XML query method to concatenate strings into one string:
DECLARE @sd DATE = '20150101' , @ed DATE = '20150105' DECLARE @e TABLE ( ID INT , Name NVARCHAR(MAX) ) DECLARE @a TABLE ( ID INT, d DATETIME ) INSERT INTO @e VALUES ( 1, 'Joy' ), ( 2, 'Moni' ), ( 3, 'Evan' ), ( 4, 'Farhad' ) INSERT INTO @a VALUES ( 1, '20150101' ), ( 1, '20150103' ), ( 1, '20150104' ), ( 1, '20150105' ), ( 2, '20150101' ), ( 2, '20150104' ), ( 2, '20150105' ), ( 3, '20150105' ); WITH cte AS ( SELECT ID , sd = MIN(d) , ed = MAX(d) , ROW_NUMBER() OVER ( PARTITION BY ID ORDER BY MAX(d) - MIN(d) DESC, MAX(d) DESC ) AS rn FROM ( SELECT ID , CAST(d AS INT) AS d , rn = CAST(d AS INT) - ROW_NUMBER() OVER ( PARTITION BY ID ORDER BY d ) FROM @a WHERE d >= @sd AND d <= @ed ) a GROUP BY ID , rn ) SELECT e.Name , ( SELECT STUFF((SELECT ',' + CONVERT(NVARCHAR(8), d, 112) FROM @aa WHERE a.ID = c.ID AND ad >= c.sd AND ad <= c.ed ORDER BY d desc FOR XML PATH('') , TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '') ) AS Date FROM cte c JOIN @ee ON e.ID = c.ID WHERE rn = 1
Output:
Name Date Joy 20150105,20150104,20150103 Moni 20150105,20150104 Evan 20150105