запрос с аналитическими функциями

a2d
Дата: 02.08.2005 15:50:59
Помогите пожалуйста правильно составить запрос следующего типа:
имеется таблица, содержащая данные, актуальные на опр. момент времени, соответственно имеется поле типа Дата.
Необходимо составить запрос выбирающий значения на опр. дату, а так же агрегированные значения (напр. сумма за посл. месяц/год, кол-во записей за посл. месяц/год и т.п.)
если в конструкции select жестко задать условие where Дата = Моя_Дата то это ограничивает записи при использовании конструкции типа
sum(..) over (partition by ...)
или же я чего то непонимаю ?
на данный момент использую select sum(...) при перечислении полей, но работает это ОЧЕНЬ медленно.
заранее всем спасибо.
Vadim_Maximov
Дата: 02.08.2005 15:55:46
Например так:
select *
from   (select my_date,
               sum(my_date) over(partition by trunc(my_date, 'WW')) as week_sum,
               sum(my_date) over(partition by trunc(my_date, 'MM')) as month_sum
               sum(my_date) over(partition by trunc(my_date, 'YYYY')) as year_sum
        from   table)
where  my_date = X
a2d
Дата: 02.08.2005 16:09:08
спасибо, но не очень подходит, т.к. групповые ф-ии отсчитываются от даты указаной в условии where: день/месяц/год тому назад
lkv
Дата: 02.08.2005 16:25:00
select doc.t_sum,sum(doc.t_sum) over (order by doc.t_date_carry 
                                     rows unbounded preceding) 
  from darhdoc_dbt doc
where doc.t_date_carry >= to_date('01.06.2005','dd.mm.rrrr') 
сами суммы и они же нарастающим итогом от начала месяца
givanov
Дата: 03.08.2005 10:27:08
select sum(case when trunc(my_date,'dd') = :X then val1 end) day_value,
         sum(case when trunc(my_date,'dd') >= add_months(:X,-1) then val1 end) month_value,
         sum(val1) year_value
where  my_date > add_months(:X, -12) and my_date < :X

И аналитические функции не нужны.
a2d
Дата: 03.08.2005 11:56:57
givanov
[src oracle]
И аналитические функции не нужны.


Спасибо, за вариант, только как в подобном случае выбрать текущие значения (на день :Х). опять ч\з case ? мне это кажется это несколько неправильно :-)
К тому же в предложенном запросе обрабатываются все записи за посл. год, а их достаточно много ...
Может быть всё таки аналитические ф-ии ?
givanov
Дата: 03.08.2005 12:17:26
a2d
К тому же в предложенном запросе обрабатываются все записи за посл. год, а их достаточно много ...
Может быть всё таки аналитические ф-ии ?


Тогда остается одно:
select sum(val1) day_value,
         30*sum(val1) month_value,
         365*sum(val1) year_value
where my_date = :X
:-))
a2d
Дата: 03.08.2005 13:13:58
givanov


Тогда остается одно:
select sum(val1) day_value,
         30*sum(val1) month_value,
         365*sum(val1) year_value
where my_date = :X
:-))


с определенной долей вероятности это может соответствовать действительности :-)