oracle - 从 Oracle SQL 返回每组中的第一行

标签 oracle oracle11g

嗨,我需要提出一个查询,该查询可以有效地为每个组仅返回一条记录(我可能认为这是错误的),并且一旦找到一条记录就停止搜索该组中的更多记录。

这是我的 table :

|col1 | col2|
|-----|-----|
| A   |  1  |
| A   |  2  |
| B   |  3  |
| B   |  4  |

我想回来。

|col1 | col2|
|-----|-----|
| A   |  1  |
| B   |  3  |

请注意,我实际上并不关心第一行中是否有 A1A2(同样适用于第二行)。 我想要的是获取第一列中具有 A 的一条记录,可以是符合该条件的任何记录,同样,我想要一条在 col1 中具有 B 的记录。

据我所知,要得到这个结果需要两个查询

SELECT col1, MIN(col2)
FROM tablename
GROUP BY col1

另一个:

SELECT *
FROM tablename
WHERE col1 = 'A' 
    AND ROWNUM = 1

第一个查询不够好,因为它会尝试查找 col1 中具有 A 的所有记录(在我正在查看的实际表中,这意味着搜索数百万行,我的索引在这里没有多大帮助)。第二个查询一次仅返回 col1 的一个值,因此我必须运行它数千次才能获取我需要的所有记录。

注意:

我确实在这里看到了类似的问题,但答案集中在获得正确的查询结果,我的案例问题是我需要等待这些结果多长时间。

最佳答案

听起来这就是您正在寻找的查询:

select col1
     , min(col2) keep (dense_rank first order by rownum) col2
from tablename
group by col1;

关于oracle - 从 Oracle SQL 返回每组中的第一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51860435/

相关文章:

Oracle selectsequence.nextval from Dual 听起来太慢

java - oracle Jdbc更新语句返回零

database - Oracle INSERT ALL with SELECT 给出无效的规范错误

java - 无法使用 Hibernate 检索 Oracle 中最后插入的行的 id

java - 从 spring mvc 应用程序并行更新 oracle 表

oracle - 转换不同世纪的日期

plsql - 为 SELECT FROM TABLE(collection) 中的全局集合类型的匿名列指定别名

Oracle Select 有效,Update 无效,相同的 WHERE 子句

sql - 帮助优化 Oracle 查询

java - processBuilder 无法在不同主机上加载数据?