做和的冗余()

时间:2010-06-11 15:00:26

标签: sql oracle10g

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()只进行一次。请帮助解决这个问题

1 个答案:

答案 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的评论没有意义。