powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Расчет поля по группе
6 сообщений из 6, страница 1 из 1
Расчет поля по группе
    #39679553
AVP2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день,
Был получен рекордсет с идентификатором групп.
Подскажите как можно подсчитать поле amount_2, т.е. для gr_id_1 = 1.
Смотрел в сторону LAG/LEAD, который позволяет задать позицию строки с которой можно брать значение(но в моем случае не факт равномерности по строкам в разрезе группы), но не совсем пойму как можно его прикрутить здесь :(
Алгоритм:
01.04.2018 - для -253228 предыдущего значения нет, т.о. 0.
02.04.2018 - amount2 от 01.04.2018 - amount1 от 02.04.2018, т.о. -253228 + 57661 = -195567
03.04.2018 - amount2 от 02.04.2018 - amount1 от 03.04.2018, т.о. -195567 + -74752 = -270319
и т.д.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
with tab as
(
select to_date('01.04.2018','dd.mm.yyyy')s_date,  '01' s_ident1,  '1' s_ident2,    0 gr_id_1,  0 gr_id_2,   114406 amount, 114406 amount_1, 1 amount_2  from dual union all
select to_date('01.04.2018','dd.mm.yyyy'),  '01',      '2',  0,  0,  24866,  24866, 2 from dual union all
select to_date('01.04.2018','dd.mm.yyyy'),  '01',      '3',  0,  0,  362082.3,  -362082.3, 3 from dual union all
select to_date('01.04.2018','dd.mm.yyyy'),  '01',      '4',   0,  0,   30417.7,  -30417.7, 4 from dual union all
select to_date('01.04.2018','dd.mm.yyyy'),  '01',      null, 1,  0,   531772,  -253228, -253228 from dual union all
select to_date('02.04.2018','dd.mm.yyyy'),  '01',      '1',  0,  0,   67502,  67502, 1 from dual union all
select to_date('02.04.2018','dd.mm.yyyy'),  '01',      '2',  0,  0,   31159,  31159, 2 from dual union all
select to_date('02.04.2018','dd.mm.yyyy'),  '01',      '3',  0,  0,   17766,  -17766, 3 from dual union all
select to_date('02.04.2018','dd.mm.yyyy'),  '01',      '4',  0,  0,   23234,  -23234, 4 from dual union all
select to_date('02.04.2018','dd.mm.yyyy'),  '01',      null, 1,  0,   139661,  57661, -195567 from dual union all
select to_date('03.04.2018','dd.mm.yyyy'),  '01',      '1',  0,  0,   95119,  95119, 1 from dual union all
select to_date('03.04.2018','dd.mm.yyyy'),  '01',      '2',  0,  0,   18129,  18129, 2 from dual union all
select to_date('03.04.2018','dd.mm.yyyy'),  '01',      '3',  0,  0,   146860.3,  -146860.3, 3 from dual union all
select to_date('03.04.2018','dd.mm.yyyy'),  '01',      '4',  0,  0,   41139.7,  -41139.7, 4 from dual union all
select to_date('03.04.2018','dd.mm.yyyy'),  '01',      '5',  0,  0,   41.7,  -41.7, 5 from dual union all
select to_date('03.04.2018','dd.mm.yyyy'),  '01',      null, 1,  0,   301248,  -74752, -270319 from dual)
select * from tab



Спасибо!
...
Рейтинг: 0 / 0
Расчет поля по группе
    #39679607
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AVP2012,

Очередная постановка задачи заставляющая доставать хрустальный шар:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
with tab as
(
select to_date('01.04.2018','dd.mm.yyyy')s_date,  '01' s_ident1,  '1' s_ident2,    0 gr_id_1,  0 gr_id_2,   114406 amount, 114406 amount_1, 1 amount_2  from dual union all
select to_date('01.04.2018','dd.mm.yyyy'),  '01',      '2',  0,  0,  24866,  24866, 2 from dual union all
select to_date('01.04.2018','dd.mm.yyyy'),  '01',      '3',  0,  0,  362082.3,  -362082.3, 3 from dual union all
select to_date('01.04.2018','dd.mm.yyyy'),  '01',      '4',   0,  0,   30417.7,  -30417.7, 4 from dual union all
select to_date('01.04.2018','dd.mm.yyyy'),  '01',      null, 1,  0,   531772,  -253228, -253228 from dual union all
select to_date('02.04.2018','dd.mm.yyyy'),  '01',      '1',  0,  0,   67502,  67502, 1 from dual union all
select to_date('02.04.2018','dd.mm.yyyy'),  '01',      '2',  0,  0,   31159,  31159, 2 from dual union all
select to_date('02.04.2018','dd.mm.yyyy'),  '01',      '3',  0,  0,   17766,  -17766, 3 from dual union all
select to_date('02.04.2018','dd.mm.yyyy'),  '01',      '4',  0,  0,   23234,  -23234, 4 from dual union all
select to_date('02.04.2018','dd.mm.yyyy'),  '01',      null, 1,  0,   139661,  57661, -195567 from dual union all
select to_date('03.04.2018','dd.mm.yyyy'),  '01',      '1',  0,  0,   95119,  95119, 1 from dual union all
select to_date('03.04.2018','dd.mm.yyyy'),  '01',      '2',  0,  0,   18129,  18129, 2 from dual union all
select to_date('03.04.2018','dd.mm.yyyy'),  '01',      '3',  0,  0,   146860.3,  -146860.3, 3 from dual union all
select to_date('03.04.2018','dd.mm.yyyy'),  '01',      '4',  0,  0,   41139.7,  -41139.7, 4 from dual union all
select to_date('03.04.2018','dd.mm.yyyy'),  '01',      '5',  0,  0,   41.7,  -41.7, 5 from dual union all
select to_date('03.04.2018','dd.mm.yyyy'),  '01',      null, 1,  0,   301248,  -74752, -270319 from dual)

select s_date, nvl2(s_ident2,amount_2,sum(nvl2(s_ident2,null,amount_1)) over (order by s_date)) amount_2_new
from tab



оно?
...
Рейтинг: 0 / 0
Расчет поля по группе
    #39679609
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AVP2012,

этот селект проверяет условие s_ident2 как признак строк которые надо считать, потому как Вы не написали признака, и дали очень много полей, по моему мнению не относящихся к решению вашей задачи
...
Рейтинг: 0 / 0
Расчет поля по группе
    #39679610
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AVP2012,

Можно и так:
Код: plsql
1.
2.
3.
select s_date, nvl2(s_ident2,amount_2,sum(amount_1) over (partition by s_ident2 order by s_date)) amount_2_new
from tab
order by s_date, s_ident2



Но тоже признак s_ident2
...
Рейтинг: 0 / 0
Расчет поля по группе
    #39679612
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AVP2012,

Переделал на gr_id_1 = 1

Код: plsql
1.
2.
3.
select s_date, decode(gr_id_1,1,sum(amount_1) over (partition by gr_id_1 order by s_date), amount_2) amount_2_new
from tab
order by s_date, gr_id_1
...
Рейтинг: 0 / 0
Расчет поля по группе
    #39679621
AVP2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaximaXXL,

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


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