Составить запрос выборки без повторов по одному полю

есть таблица (oracle) где колонка Param имеет дублирующие значения - 111

Name    Param
АА      111
BB      222
CC      111
DD      333

пробую составить запрос что-то типа

select Name, Param, row_number() over (partition by Name order by Param) from name_param;

и получить

Name    Param
АА      111
BB      222
DD      333

без дубликата по полю Param

но не совсем получается(

подскажите, пожалуйста, как правильно сделать?


Ответы (1 шт):

Автор решения: Alex R.

Необходимо решить, что делать с полем name. Взять минимальное, максимальное?

Перечисление всех значений в строчку и минимальное значение

select
  Param, listagg (name, ';') WITHIN GROUP (name) Names, min(name) MName
from name_param
group by Param

Результат

Param   Names   MName
111     АА;CC   AA     
222     BB      BB
333     DD      DD

На основе вашего запроса, первый в списке (что идентично использованию min)

select
  Param, name
from 
(select
  param, name, row_number() over (partition by param order by name) num
from name_param)
where num = 1
→ Ссылка