Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Скользящая сумма  [new]
aguka1
Guest
Есть таблица с двумя колонками:
1.Дата транзакции
2.Сумма транзакции

Мне нужно получить для каждого месяца сумму транзакций за последние 12 месяцев.
Т.е.с каждьім месяцем интервал сдвигается.
При помощи аналитических функций єто скорее всего можно как-то организовать при помощи одного запроса, но у меня не получается. :(
Подскажите?
11 май 11, 12:42    [10634322]     Ответить | Цитировать Сообщить модератору
 Re: Скользящая сумма  [new]
Elic
Member

Откуда:
Сообщений: 29977
aguka1
но у меня не получается. :(
Т.е. разжуйте и в рот положите?!
11 май 11, 12:45    [10634353]     Ответить | Цитировать Сообщить модератору
 Re: Скользящая сумма  [new]
aguka1
Guest
Ага. Т.е. если не лень и не жалко и не займет много времени :)
11 май 11, 12:51    [10634403]     Ответить | Цитировать Сообщить модератору
 Re: Скользящая сумма  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
10579978
11 май 11, 12:56    [10634454]     Ответить | Цитировать Сообщить модератору
 Re: Скользящая сумма  [new]
Data corruption
Guest
aguka1,

STFF
11 май 11, 12:57    [10634465]     Ответить | Цитировать Сообщить модератору
 Re: Скользящая сумма  [new]
aguka1
Guest
Ramin
10579978

Мне не нужно вьібирать из каждой группы записей первые N записей, а наоборот для каждого месяца группа меняется, но определить ето правило не получается.
11 май 11, 13:09    [10634578]     Ответить | Цитировать Сообщить модератору
 Re: Скользящая сумма  [new]
AmKad
Member

Откуда:
Сообщений: 5222
+
with s as
(select sysdate + dbms_random.value(1, 1000) dt, trunc(dbms_random.value(1, 1000)) sm from dual
 connect by level <= 100
)
select s.*,
sum(sm) over (order by dt) sm_over,
sum(sm) over (order by dt                 range between abs(dt                 - 1/24/60/60 - add_months(dt                , -12)) preceding and current row) sm_over_12_1,
sum(sm) over (order by trunc(dt, 'month') range between abs(trunc(dt, 'month') - 1/24/60/60 - add_months(trunc(dt, 'month'), -12)) preceding and current row) sm_over_12_2
from s
order by dt;
11 май 11, 13:26    [10634778]     Ответить | Цитировать Сообщить модератору
 Re: Скользящая сумма  [new]
aguka1
Guest
AmKad, спасибо огромное!
sum(sm) over
(order by trunc(dt, 'month')
range between abs(trunc(dt, 'month') - 1/24/60/60 - add_months(trunc(dt, 'month'), -12))
preceding and current row) sm_over_12_2
именно то, что нужно
11 май 11, 13:40    [10634948]     Ответить | Цитировать Сообщить модератору
 Re: Скользящая сумма  [new]
Elic
Member

Откуда:
Сообщений: 29977
AmKad,

sum(sm) over (order by trunc(dt, 'month') range between interval '11' month preceding and current row) sm_over_12_2
11 май 11, 13:51    [10635082]     Ответить | Цитировать Сообщить модератору
 Re: Скользящая сумма  [new]
SQLap
Member [заблокирован]

Откуда:
Сообщений: 34063
aguka1,

можно и без аналитики

select periods.beg, periods.ent, sum(tab.summa) from
(select sysdate+a.k*10 dat, rownum summa from 
(select rownum k from
(select 1 from dual group by cube(1,1,1,1))) a) tab,
(select distinct add_months(trunc(sysdate+a.k*10,'mon'),-12) beg, last_day(sysdate+a.k*10) ent from 
(select rownum k from
(select 1 from dual group by cube(1,1,1,1))) a) periods
where tab.dat between periods.beg and periods.ent
group by periods.beg, periods.ent
order by 1
11 май 11, 13:54    [10635121]     Ответить | Цитировать Сообщить модератору
 Re: Скользящая сумма  [new]
Elic
Member

Откуда:
Сообщений: 29977
SQLap
можно и без аналитики
Треплу дозволяется и не такой бред.
11 май 11, 14:10    [10635292]     Ответить | Цитировать Сообщить модератору
 Re: Скользящая сумма  [new]
SQLap
Member [заблокирован]

Откуда:
Сообщений: 34063
Elic
SQLap
можно и без аналитики
Треплу дозволяется и не такой бред.

что опять не так, о узкий специалист, подобный флюсу?
11 май 11, 14:13    [10635316]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить