Если вы работаете на SQL Server 2005 или более поздней версии:
; WITH NumberedRows as (
SELECT Id,Name,
ROW_NUMBER() OVER (ORDER BY Id) as rnAsc,
ROW_NUMBER() OVER (ORDER BY Id desc) as rnDesc
FROM
Locations
)
select * from NumberedRows where rnAsc = 1 or rnDesc = 1
Единственное место, которое не будет похоже на ваш исходный запрос, - это если в таблице только одна строка (в этом случае мойответ возвращает одну строку, а ваша возвращает одну и ту же строку дважды)