;WITH CTE
AS
(
SELECT ROW_NUMBER() OVER (PARTITION BY id ORDER BY asofdate,desc) AS Seq,*
FROM table
)
SELECT id,asofdate
FROM
(
SELECT c1.id,c1.asofdate,ROW_NUMBER() OVER (PARTITION BY c1.id ORDER BY c1.asofdate DESC) AS Rn
FROM CTE c1
INNER JOIN CTE c2
On c2.id = c1.id
AND c2.Seq = c1.Seq+1
AND c2.desc <> c1.desc
)t
WHERE Rn=1
------------------------------------------------------------------------------------------------------
SQL Server MVP
http://visakhm.blogspot.com/