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

Popular posts from this blog

c# - How Configure Devart dotConnect for SQLite Code First? -

java - Copying object fields -

c++ - Clear the memory after returning a vector in a function -