Here is one possible way:set nocount ondeclare @TableA table (item_id int, date_1 datetime)insert @TableAselect 1, '06/25/2006' union allselect 2, '06/12/2006'declare @TableB table (id int, item_id int, date_2 datetime)insert @tablebselect 1, 1, '06/20/2006' union allselect 2, 1, '06/23/2006' union allselect 3, 1, '06/27/2006' union allselect 4, 2, '06/10/2006' union allselect 5, 2, '06/11/2006' union allselect 6, 2, '06/14/2006'select b.*from @tableA ajoin @tableB b on b.item_id = a.item_idwhere b.id in ( select top 1 id from @tableB c where c.item_id = a.item_id order by abs(datediff(day, a.date_1, c.date_2)) asc ,c.date_2 )output:id item_id date_2 ----------- ----------- -------------------------2 1 2006-06-23 00:00:00.0005 2 2006-06-11 00:00:00.000
Be One with the OptimizerTG