table1 - > id,time_stamp,value
此表由10个id组成。每个id将具有一天中每小时的值。 因此,对于1天,此表中将有240条记录。
table2 - > ID
表2由table1中存在的动态变化的id子集组成。
在特定情况下,目的是从table1获取sum(value),仅考虑表2中的id, 按当天每小时分组,给出汇总值一个等级并每天重复这个。
查询处于此阶段:
select time_stamp, sum(value),
rank() over (partition by trunc(time_stamp) order by sum(value) desc) rn
from table1
where exists (select t2.id from table2 t2 where id=t2.id)
and
time_stamp >= to_date('05/04/2010 00','dd/mm/yyyy hh24') and
time_stamp <= to_date('25/04/2010 23','dd/mm/yyyy hh24')
group by time_stamp
order by time_stamp asc
如果查询是正确的,那么这可以提高效率,考虑到这一点,table1实际上将包含数千个id而不是10个吗?
编辑:我在查询中使用sum(value)2次,我无法得到一个解决方法,使sum()只进行一次。请帮助解决这个问题
答案 0 :(得分:2)
<击> 来自table1 where where(从table2 t2中选择t2.id,其中value = t2.value)
table2没有Value
字段。为什么以上查询使用t2.Value
?
击>
你可以在这里使用联接
from table1 t1 join table2 t2 on t1.id = t2.id
编辑:我曾在Oracle工作过一段时间。请原谅,如果我对t2.Value
的评论没有意义。