Вы можете использовать row_number()
, чтобы назначить каждой строке номер в заданном порядке для каждого идентификатора. Используйте CASE
для определения порядка по местоположению.
SELECT x.id,
x.name,
x.location
FROM (SELECT t.id,
t.name,
t.location,
row_number() OVER (PARTITION BY t.id
ORDER BY CASE location
WHEN 'home' THEN
1
WHEN 'office' THEN
2
WHEN 'village' THEN
3
ELSE
4
END)
FROM elbat) x
WHERE x.rn = 1;
Примечание. Если местоположения точно соответствуют заданным трем, CASE
не требуется, поскольку они, по совпадению, уже имеют требуемый порядок при лексикографической сортировке. Но я предполагаю, что это был только пример, и совпадение может не быть дано в реальных данных.