大量数据避免分析功能

时间:2018-07-10 02:55:09

标签: sql oracle bigdata

假设此表中有1亿个不同的SID值。

示例:表test的列SID, date_operation, score

因此,在此表中,分数每天都在变化,因此,如果我想获取所有具有最新分数的SID的报告,不想使用分析功能,否则成本会很高。也尝试过自我加入,但看起来也很昂贵。

如果该问题有多余之处,请直接转至类似的问题,我将其删除。

2 个答案:

答案 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;