If you understand correctly, there can be several dates for any given id and several texts for a given date.
If you are using Sql Server 2005
I got it to work
DECLARE @Table TABLE( ID INT, DDATE DATETIME, VAL VARCHAR(MAX) ) INSERT INTO @Table (ID,DDATE,VAL) SELECT 1, '01 Jan 2009', '1' INSERT INTO @Table (ID,DDATE,VAL) SELECT 1, '01 Feb 2009', '2' INSERT INTO @Table (ID,DDATE,VAL) SELECT 1, '01 Feb 2009', '3' INSERT INTO @Table (ID,DDATE,VAL) SELECT 2, '01 Jan 2009', '4' SELECT ID, DDATE, VAL, ROWNUMBER FROM ( SELECT t.ID, t.DDATE, t.VAL, ROW_NUMBER() OVER (PARTITION BY t.ID ORDER BY DDATE) ROWNUMBER FROM @Table t INNER JOIN ( SELECT ID, MAX(DDATE) AS MAXDATE FROM @Table GROUP BY ID ) md ON t.ID = md.ID AND t.DDATE = md.MAXDATE ) RowNumber WHERE RowNumber.ROWNUMBER = 1
source share