Some badly needed practice with keep ... dense_rank first
(thanks for the reminder Gordon Linoff):
select task_id,
max(owner) keep (dense_rank last order by priority) as owner,
max(priority) keep (dense_rank last order by priority) as priority
from t42
group by task_id
order by task_id;
TASK_ID OWNER PRIORITY
---------- ---------- ----------
13912 JUNGIL 99
13913 JUNGIL 99
Or if the highest priority is 1 then:
select task_id,
max(owner) keep (dense_rank first order by priority) as owner,
max(priority) keep (dense_rank first order by priority) as priority
from t42
group by task_id
order by task_id;
TASK_ID OWNER PRIORITY
---------- ---------- ----------
13912 BANCS 1
13913 BANCS 1
You could also do it with a subquery and analytics:
select task_id, owner, priority
from (
select task_id, owner, priority,
dense_rank() over (partition by task_id order by priority) as rnk
from t42
)
where rnk = 1
order by task_id;
TASK_ID OWNER PRIORITY
---------- ---------- ----------
13912 BANCS 1
13913 BANCS 1
... but the keep
approach is simpler. SQL Fiddle showing both.