如何从重复值 Oracle SQL 查询中获取第一行

how get first row from duplicata values Oracle SQL query

下面你可以找到我的 table 和值(我的 table 没有限制):

SELECT DISTINCT * FROM khalil;

输出:

ID VALUE
-- -------
 1 yassine
 1 khalil
 2 amine

当我有重复值时,我需要获取第一行。

我有两行 id = 1 所以,在这种情况下,我需要第一行, 这是 id = 1value = 'yassine'

如果您真的不在乎您会得到哪个 value(除非有什么东西可以用来区分值),聚合 - 例如 minmax -可以帮助:

SQL> select id,
  2         max(value) value
  3  from khalil
  4  group by id
  5  order by id;

        ID VALUE
---------- --------------------
         1 yassine
         2 amine

SQL>

或者,使用分析函数(例如 row_number,它可以让您 排序 值),您可以按如下方式进行:

SQL> with temp as
  2    (select id,
  3            value,
  4            row_number() over (partition by id order by value desc) rn
  5     from khalil
  6    )
  7  select id,
  8         value
  9  from temp
 10  where rn = 1
 11  order by id;

        ID VALUE
---------- --------------------
         1 yassine
         2 amine

SQL>
SELECT * FROM khalil
WHERE ROWID IN (SELECT MIN(ROWID) FROM khalil GROUP BY id)
ORDER BY id

这将 return 每个 ID 的第一行。