Избыточность при выполнении суммы () - PullRequest
0 голосов
/ 11 июня 2010

table1 -> id, отметка времени, значение

Эта таблица состоит из 10 идентификаторов. Каждый идентификатор будет иметь значение для каждого часа в дне. Таким образом, за 1 день в этой таблице будет 240 записей.

table2 -> id

Таблица 2 состоит из динамически изменяющегося подмножества идентификатора, присутствующего в таблице 1.

В конкретном случае намерение состоит в том, чтобы получить сумму (значение) из таблицы1, учитывая только идентификаторы в таблице2, группировка по каждому часу в этот день, присвоение суммированным значениям ранга и повторение этого каждый день.

запрос находится на данном этапе:

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 будет состоять из тысяч идентификаторов вместо 10?

РЕДАКТИРОВАТЬ: я использую сумму (значение) 2 раза в запросе, который я не могу найти обходной путь, так что сумма () делается только один раз. Пожалуйста, помогите на этом

1 Ответ

2 голосов
/ 11 июня 2010

из таблицы1 где существует (выберите t2.id из таблицы 2 t2, где значение = t2.value)

Таблица2 не имеет поля Value. Почему вышеупомянутый запрос с t2.Value?
Вы можете использовать соединение здесь

from table1 t1 join table2 t2 on  t1.id = t2.id

РЕДАКТИРОВАТЬ: Я давно работал над Oracle. Извините, если мой комментарий к t2.Value не имеет смысла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...