sql - Returning a set of the most recent rows from a table -
i'm trying retrieve latest set of rows source table containing foreign key, date , other fields present. sample set of data be:
create table #tmp (primaryid int, foreignkeyid int, startdate datetime, otherfield varchar(50)) insert #tmp values (1, 1, '1 jan 2010', 'test 1') insert #tmp values (2, 1, '1 jan 2011', 'test 2') insert #tmp values (3, 2, '1 jan 2013', 'test 3') insert #tmp values (4, 2, '1 jan 2012', 'test 4')
the form of data i'm hoping retrieve is:
foreignkeyid maxstartdate otherfield ------------ ----------------------- ------------------------------------------- 1 2011-01-01 00:00:00.000 test 2 2 2013-01-01 00:00:00.000 test 3
that is, 1 row per foreignkeyid
showing latest start date , associated other fields - primaryid
irrelevant.
i've managed come with:
select t.foreignkeyid, t.startdate, t.otherfield #tmp t inner join ( select foreignkeyid, max(startdate) maxstartdate #tmp group foreignkeyid ) s on t.foreignkeyid = s.foreignkeyid , s.maxstartdate = t.startdate
but (a) uses inner queries, suspect may lead performance issues, , (b) gives repeated rows if 2 rows in original table have same foreignkeyid
, startdate
.
is there query return first match each foreign key , start date?
depending on sql server version, try following:
select * ( select *, rnum = row_number() on ( partition #tmp.foreignkeyid order #tmp.startdate desc) #tmp ) t t.rnum = 1
Comments
Post a Comment