I would probably use a correlated subquery.
SELECT MAX(TransDate) AS TransDate, Id, (SELECT TOP (1) Active FROM T t2 WHERE t2.Id = t1.Id AND Active IS NOT NULL ORDER BY TransDate DESC) AS Active FROM T t1 GROUP BY Id
Way without
SELECT Id, MAX(TransDate) AS TransDate, CAST(RIGHT(MAX(CONVERT(CHAR(23),TransDate,121) + CAST(Active AS CHAR(1))),1) AS BIT) AS Active, CAST(MAX(DATEDIFF(SECOND,'19500101',TransDate) * CAST(10 AS BIGINT) + Active)%10 AS BIT) AS Active2 FROM T GROUP BY Id
Or after comments will cross apply work better for you?
WITH T (TransDate, Id, Active, SomeOtherColumn) AS ( select GETDATE(), 5, 1, 'A' UNION ALL select 1+GETDATE(), 5, 0, 'B' UNION ALL select 2+GETDATE(), 5, null, 'C' UNION ALL select 3+GETDATE(), 5, 1, 'D' UNION ALL select 4+GETDATE(), 5, 0, 'E' UNION ALL select 5+GETDATE(), 5, null,'F' ), T1 AS ( SELECT MAX(TransDate) AS TransDate, Id FROM T GROUP BY Id ) SELECT T1.TransDate, Id, CA.Active AS Active, CA.SomeOtherColumn AS SomeOtherColumn FROM T1 CROSS APPLY (SELECT TOP (1) Active, SomeOtherColumn FROM T t2 WHERE t2.Id = T1.Id AND Active IS NOT NULL ORDER BY TransDate DESC) CA