Given 2 tables called “table1” and “table1_hist” that structurally resemble this:
TABLE1
id status date_this_status
1 open 2008-12-12
2 closed 2009-01-01
3 pending 2009-05-05
4 pending 2009-05-06
5 open 2009-06-01
TABLE1_hist
id status date_this_status
2 open 2008-12-24
2 pending 2008-12-26
3 open 2009-04-24
4 open 2009-05-04
With table1 being the current status and table1_hist being a history table of table1, how can I return the rows for each id that has the earliest date. In other words, for each id, I need to know it’s earliest status and date.
EXAMPLE:
For id 1 earliest status and date is open and 2008-12-12.
For id 2 earliest status and date is open and 2008-12-24.
I’ve tried using MIN(datetime), unions, dynamic SQL, etc. I’ve just reached tsql writers block today and I’m stuck.
Edited to add: Ugh. This is for a SQL2000 database, so Alex Martelli’s answer won’t work. ROW_NUMBER wasn’t introduced until SQL2005.
The following code sample is completely self-sufficient, just copy and paste it into a management studio query and hit F5 =)