使用Oracle SQL获得不同的结果

时间:2015-08-11 15:22:58

标签: sql oracle

我有以下数据结构

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

Colum NAME和ID应包含MIN或FIRST值。

但实际上我在这里坚持使用MIN / FIRST。

我欢迎每一个tipps: - )

2 个答案:

答案 0 :(得分: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 :(得分: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表没有订单。所以没有“第一”价值。