Here are 3 alternatives (the last one, being the prefered one):select a.* from payments as a inner join (select firstname ,lastname ,min([date]) as [date] from payments group by firstname ,lastname ) as b on b.firstname=a.firstname and b.lastname=a.lastname and b.[date]=a.[date];select a.* from payments as a left outer join payments as b on b.firstname=a.firstname and b.lastname=a.lastname and b.[date]<a.[date] where b.firstname is null;select * from (select * ,row_number() over (partition by firstname,lastname order by [date]) as rn from payments ) as a where rn=1;