嗨,我需要提出一个查询,该查询可以有效地为每个组仅返回一条记录(我可能认为这是错误的),并且一旦找到一条记录就停止搜索该组中的更多记录。
这是我的 table :
|col1 | col2|
|-----|-----|
| A | 1 |
| A | 2 |
| B | 3 |
| B | 4 |
我想回来。
|col1 | col2|
|-----|-----|
| A | 1 |
| B | 3 |
请注意,我实际上并不关心第一行中是否有 A
、1
或 A
、2
(同样适用于第二行)。
我想要的是获取第一列中具有 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/