with CTE as( select bookid, ROW_NUMBER() OVER(PARTITION BY Location ORDER BY bookid DESC) as RowNum from MyTable)delete from MyTablefrom MyTable as tjoin CTE as c on c.bookid = t.bookid and c.RowNum > 1
DELETE FROM tnFROM dbo.tablename tnINNER JOIN ( SELECT location, MAX(bookid) AS bookid FROM dbo.tablename GROUP BY location) AS tn_max ON tn.location = tn_max.location AND tn.bookid < tn_max.bookid