如何从重复值 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 = 1
和 value = 'yassine'
如果您真的不在乎您会得到哪个 value
(除非有什么东西可以用来区分值),聚合 - 例如 min
或 max
-可以帮助:
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 的第一行。
下面你可以找到我的 table 和值(我的 table 没有限制):
SELECT DISTINCT * FROM khalil;
输出:
ID VALUE -- ------- 1 yassine 1 khalil 2 amine
当我有重复值时,我需要获取第一行。
我有两行 id = 1
所以,在这种情况下,我需要第一行,
这是 id = 1
和 value = 'yassine'
如果您真的不在乎您会得到哪个 value
(除非有什么东西可以用来区分值),聚合 - 例如 min
或 max
-可以帮助:
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 的第一行。