Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Сумма с нарастающим итогом / 14 сообщений из 14, страница 1 из 1
02.02.2017, 14:50
    #39397295
lenysik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма с нарастающим итогом
Добрый день!
Прошу подсказать, как получить сумму с нарастающим итогом без пропуска дат, например,

Значения есть на даты
01.01.2017 3
05.01.2017 8
06.01.2017 1
08.01.2017 2
10.01.2017 2


Надо получить
01.01.2017 3
02.01.2017 3
03.01.2017 3
04.01.2017 3
05.01.2017 11
06.01.2017 12
07.01.2017 12
08.01.2017 14
09.01.2017 14
10.01.2017 16
...
Рейтинг: 0 / 0
02.02.2017, 15:03
    #39397313
Vint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма с нарастающим итогом
lenysik,
на кухню -->
...
Рейтинг: 0 / 0
02.02.2017, 15:08
    #39397318
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма с нарастающим итогом
lenysik,

календарь + partition join + sum over
...
Рейтинг: 0 / 0
02.02.2017, 15:25
    #39397340
lenysik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма с нарастающим итогом
envlenysik,

календарь + partition join + sum over
У меня пропускаются даты, если нет дат в таблице b.
Где ошибка?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
select a.dt , 
                          sum(num) over(order by a.dt desc range unbounded preceding) sval_range
       
          from  (select to_date('01.01.2017','dd.mm.yyyy') + level -1 dt
                  from dual connect by level  <= 31)   a 
      left join  b on b.dat=a.dt
      
...
Рейтинг: 0 / 0
02.02.2017, 15:34
    #39397344
Vint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма с нарастающим итогом
lenysik,
ошибка в выборе профессии. тебе же прямым текстом написали КАЛЕНДАРЬ+
...
Рейтинг: 0 / 0
02.02.2017, 15:36
    #39397348
Сумма с нарастающим итогом
lenysik,

env partition join
...
Рейтинг: 0 / 0
02.02.2017, 15:37
    #39397350
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма с нарастающим итогом
lenysik,

Почему desc? И что будет, если нет значения на 01.01.2017?
...
Рейтинг: 0 / 0
02.02.2017, 15:40
    #39397354
lenysik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма с нарастающим итогом
env,

desc чтобы сумма на сегодня была минимальная на последнюю дату, и потом возрастала (немного упростила условие)
если на 01.01.2017 нет значения, значит должна быть накопленная сумма (или посл дата нет значения, значит 0)
...
Рейтинг: 0 / 0
02.02.2017, 15:44
    #39397359
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма с нарастающим итогом
lenysik,

Убери desc и посмотри на результат
...
Рейтинг: 0 / 0
02.02.2017, 15:47
    #39397362
lenysik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма с нарастающим итогом
env,

Неправильный, с пропусками дат

22.01.2017 124.01.2017 225.01.2017 326.01.2017 428.01.2017 529.01.2017 6
...
Рейтинг: 0 / 0
02.02.2017, 15:53
    #39397368
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма с нарастающим итогом
lenysik,

Пруф в sqlplus приведи. вот твой же запрос без desc.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
with b as (
           select to_date('01.01.2017','dd.mm.yyyy') dat, 3 num from dual union all
           select to_date('05.01.2017','dd.mm.yyyy') dat, 8 num from dual union all
           select to_date('06.01.2017','dd.mm.yyyy') dat, 1 num from dual union all
           select to_date('08.01.2017','dd.mm.yyyy') dat, 2 num from dual union all
           select to_date('10.01.2017','dd.mm.yyyy') dat, 2 num from dual)
select a.dt , 
      sum(num) over(order by a.dt range unbounded preceding) sval_range
from  (select to_date('01.01.2017','dd.mm.yyyy') + level -1 dt
    from dual connect by level  <= 12)   a 
left join  b on b.dat=a.dt;



Предположу, что запрос в задаче отличается от выполняемого на "реальных данных".
...
Рейтинг: 0 / 0
02.02.2017, 21:54
    #39397638
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма с нарастающим итогом
lenysik,

завтра сделаю
прігрузілі меня

....
stax
...
Рейтинг: 0 / 0
02.02.2017, 22:36
    #39397662
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма с нарастающим итогом
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
with t as (
           select  dt,
                   months_between(lead(dt) over(order by dt),dt) multiplier,
                   sum(amt) over(order by dt) amt
             from  tbl
          )
select  add_months(dt,level - 1) dt,
        amt
  from  t
  connect by dt = prior dt
         and prior sys_guid() is not null
         and level <= multiplier
/

DT               AMT
--------- ----------
01-JAN-17          3
01-FEB-17          3
01-MAR-17          3
01-APR-17          3
01-MAY-17         11
01-JUN-17         12
01-JUL-17         12
01-AUG-17         14
01-SEP-17         14
01-OCT-17         16

10 rows selected.

SQL> 



SY.
...
Рейтинг: 0 / 0
03.02.2017, 02:14
    #39397713
Xdredd.vl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма с нарастающим итогом
lenysik, ну вот так на первый взгляд :
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
With t As
 (Select to_date('01.01.2017', 'dd.mm.yyyy') a, 3 b
		From dual
	Union
	Select to_date('05.01.2017', 'dd.mm.yyyy') a, 8 b
		From dual
	Union
	Select to_date('06.01.2017', 'dd.mm.yyyy') a, 1 b
		From dual
	Union
	Select to_date('08.01.2017', 'dd.mm.yyyy') a, 2 b
		From dual
	Union
	Select to_date('10.01.2017', 'dd.mm.yyyy') a, 3 b
		From dual),
x As
 (Select mina + Level - 1 cura
		From (Select Min(t.a) mina, Max(t.a) maxa From t) t
	Connect By mina + Level - 1 <= maxa)

Select x.cura a, Sum(nvl(t.b, 0)) over(Order By x.cura) b
	From x
	Left Join t
		On x.cura = t.a



ab01.01.2017302.01.2017303.01.2017304.01.2017305.01.20171106.01.20171207.01.20171208.01.20171409.01.20171410.01.201717
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Сумма с нарастающим итогом / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]