您好,我需要提出一个查询,该查询可以有效地返回每个组一个记录(我可能认为这是错误的),并在找到一个记录后立即停止在该组中搜索更多记录。
这是我的桌子:
|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
第一个查询还不够好,因为它将尝试查找A
中具有col1
的所有记录(在我要查看的实际表中,这意味着要搜索数百万行,指标在这里不会有太大帮助)。第二个查询一次将仅返回一个col1
值,因此我必须运行数千次才能获取所需的所有记录。
注意:
我确实在这里看到了类似的问题,但是答案只集中在获得正确的查询结果上,我的问题是等待这些结果需要多长时间。
答案 0 :(得分:1)
听起来像这样的查询:
select col1
, min(col2) keep (dense_rank first order by rownum) col2
from tablename
group by col1;
答案 1 :(得分:0)
我感觉下面的查询正在快速返回结果。
SELECT col1,col2 FROM (
SELECT col1,col2, ROW_NUMBER () over (partition by col1 order by col2 asc)
minseq FROM tablename
--where rownum < 1000000000
)
where minseq = 1;
常规查询
SELECT col1, MIN(col2)
FROM tablename
GROUP BY col1
花费1分钟从100000000条记录中提取500条记录,此查询耗时0.03秒