Maybe one of these will Work for you.Generic:select a.VIN ,a.[repair date] ,a.[Total miles] ,a.[Total miles]-max(b.[Total miles]) as [Miles since last repair] from yourtable as a left outer join yourtable as b on b.VIN=a.VIN and b.[repair date]<=a.[repair_date] and b.[Total miles]<a.[Total miles] group by a.VIN ,a.[repair date] ,a.[Total miles]
row_number:select VIN ,[repair date] ,[Total miles] ,[Miles since last repair] from (select a.VIN ,a.[repair date] ,a.[Total miles] ,a.[Total miles]-b.[Total miles] as [Miles since last repair] ,row_number() over(partition by a.VIN order by a.[repair date] desc ,a.[Total miles] desc ) as rn from yourtable as a left outer join yourtable as b on b.VIN=a.VIN and b.[repair date]<=a.[repair_date] and b.[Total miles]<a.[Total miles] ) as a where rn=1
lag:select VIN ,[repair date] ,[Total miles] ,[Total miles]-lag([Total miles],1,0) over(partition by VIN order by [repair date] desc ,[Total miles] desc ) as [Miles since last repair] from yourtable