假设此表中有1亿个不同的SID值。
示例:表test
的列SID, date_operation, score
因此,在此表中,分数每天都在变化,因此,如果我想获取所有具有最新分数的SID的报告,不想使用分析功能,否则成本会很高。也尝试过自我加入,但看起来也很昂贵。
如果该问题有多余之处,请直接转至类似的问题,我将其删除。
答案 0 :(得分:1)
select sid, max(date_operation)
from test
group by sid
将返回您的要求:
获取所有具有最新分数的Sid
答案 1 :(得分:0)
一种方法是:
select t.*
from t
where t.date = (select max(t2.date) from test t2 where t2.sid = t.sid);
这可以利用test(sid, date)
上的索引。
但是我发现keep
在Oracle中表现良好:
select sid, max(date),
max(score) keep (dense_rank first order by date desc) as most_recent_score
from test
group by sid;