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

with t as (select * from
(select  25 as nmoney, '03.01.2011' as ddate, 'company1' as scomp, 60 as nsaldo from dual union all
select  20, '02.01.2011', 'company1', 60 from dual union all
select  30, '01.01.2011', 'company1', 60 from dual union all
select  40, '01.01.2011', 'company2', 100  from dual union all
select  50, '05.01.2011', 'company2', 100  from dual union all
select  25, '09.01.2011', 'company2', 100  from dual union all
select  50, '13.01.2011', 'company2', 100  from dual))

Необходимо получить результат
SCOMP	       NSALDO	БОЛЬШЕ_5_ДНЕЙ   	МЕНЬШЕ_5_ДНЕЙ
company1	60	        60	               0
company2	100	        25	              75

Можно ли решить это одним запросом?

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit
21 июн 11, 08:19    [10844383]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли решить одним запросом?  [new]
Elic
Member

Откуда:
Сообщений: 29976
RTFM
21 июн 11, 08:24    [10844391]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли решить одним запросом?  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4118
Мария Степановна,

Извините с утра голова не соображает, а в несколько шагов как надо?

P.S. Элик с женщинами так нельзя.
21 июн 11, 08:28    [10844397]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли решить одним запросом?  [new]
Мария Степановна
Guest
Elic,

Необходимо на дату 13.01.2011 получить результат, приведённый выше. Идти в обратном порядке по датам с группировкой по scomp, суммируя nmoney, пока сумма не привысит
nsaldo.
21 июн 11, 08:34    [10844404]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли решить одним запросом?  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 54376
Мария Степановна
Необходимо получить результат
SCOMP	       NSALDO	БОЛЬШЕ_5_ДНЕЙ   	МЕНЬШЕ_5_ДНЕЙ
извините, конечно... а куда девать РОВНО_5_ДНЕЙ?
21 июн 11, 08:36    [10844409]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли решить одним запросом?  [new]
Сергей Арсеньев
Member

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

Был, очередной раз, не прав.
21 июн 11, 08:36    [10844410]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли решить одним запросом?  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4118
Мария Степановна,

Понимаю, что это совсем не то, что Вам надо, но что в этом не так:
with t as 
(select  25 as nmoney, to_date('03.01.2011','dd.mm.yyyy') as ddate, 'company1' as scomp, 60 as nsaldo from dual union all
select  20, to_date('02.01.2011','dd.mm.yyyy'), 'company1', 60 from dual union all
select  30, to_date('01.01.2011','dd.mm.yyyy'), 'company1', 60 from dual union all
select  40, to_date('01.01.2011','dd.mm.yyyy'), 'company2', 100  from dual union all
select  50, to_date('05.01.2011','dd.mm.yyyy'), 'company2', 100  from dual union all
select  25, to_date('09.01.2011','dd.mm.yyyy'), 'company2', 100  from dual union all
select  50, to_date('13.01.2011','dd.mm.yyyy'), 'company2', 100  from dual)
select scomp,nsaldo,nsaldo-nvl(sum5,0) "БОЛЬШЕ_5_ДНЕЙ",nvl(sum5,0) "МЕНЬШЕ_5_ДНЕЙ" from(
 select scomp,max(nsaldo) keep (dense_rank first order by ddate desc) nsaldo,(select sum(nmoney) from t t2 where t2.ddate>(select max(ddate) from t)-5 and t2.scomp=t1.scomp) sum5
   from t t1
  group by scomp
);
21 июн 11, 08:47    [10844427]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли решить одним запросом?  [new]
Мария Степановна
Guest
[quot Сергей Арсеньев][quot]

Спасибо, подходит
21 июн 11, 09:03    [10844463]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить