2015-08-11 5 views
0

У меня есть следующая структура данныхПолучение отличный результат с Oracle SQL

ID | REFID | NAME 
1 | 100 | A 
2 | 101 | B 
3 | 101 | C 

С

SELECT DISTINCT REFID, ID, NAME 
FROM my_table 
ORDER BY ID 

Я хотел бы иметь следующий результат:

1 | 100 | A 
2 | 101 | B 

Колум NAME и ID должен содержать значение MIN или FIRST.

Но на самом деле я застрял при использовании MIN/FIRST здесь.

Я приветствую каждый Tipps :-)

+0

Посмотрите на 'ROW_NUMBER', он сделает все, что вам нужно. –

+1

И что должно быть 'id'? Вы тоже хотите «мин (id)»? «Id» из строки с «min (name)»? Что-то другое? –

ответ

4
select id, 
     refid, 
     name 
    from (select id, 
       refid, 
       name, 
       row_number() over(partition by refid order by name) as rn 
      from my_table) 
where rn = 1 
order by id 
1

Вы можете использовать подзапрос, чтобы сделать это.

WITH Q AS 
(SELECT MIN(NAME) AS NAME, REFID FROM T GROUP BY REFID) 
SELECT T.ID, T.REFID, T.NAME 
FROM T 
JOIN Q 
    ON (T.NAME = Q.NAME) 

Также обратите внимание, что таблицы SQL не имеют порядка. Таким образом, нет «первого» значения.

Смежные вопросы