Dronton2
Full Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Mic777 Цитата: 5 января у нас есть только бонусы от 4-го и 5-го если начислялись - а за 3-е они "сгорели" если судить из Вашей постановки задачи. | Наверное, я сумбурно объяснил. Попробую по-другому: Да, 5 января мы учитываем бонусы только за 4 и 5 января. Но, к утру 5 января мы имеем только 75 (а не 80) бонусов из 4 января, т.к. из 80 бонусов, начисленных 4 января 5 бонусов потратили в тот же день (4 января), а именно: 4 января списали всего 25 бонусов, из них: 20 бонусов, начисленных 3 января и 5 бонусов, начисленных 4 января. Значит, от 80 бонусов, начисленных 4 января, к утру 5 января осталось только 75 бонусов. А после вычета 70 бонусов, остаётся только 5. Ваши исходные данные можно упростить, удалив 1,2,3 и 5 строки, оставив так: Код: with t as ( select to_date('03.01.2001','dd.mm.yyyy') date_oper, 20 bonus_value from dual union all select to_date('04.01.2001','dd.mm.yyyy') date_oper, 80 bonus_value from dual union all select to_date('04.01.2001','dd.mm.yyyy') date_oper, -25 bonus_value from dual union all select to_date('05.01.2001','dd.mm.yyyy') date_oper, -70 bonus_value from dual ) | Результат вашего кода будет: DATE_OPER | BONUS_VALUE | SUM_BONUS_ON_DAY | 2001-01-03 | 20 | 20 | 2001-01-04 | 80 | 100 | 2001-01-04 | -25 | 75 | 2001-01-05 | -70 | 10 | А должно остаться не 10, а 5. Ну, хотя бы потому, что всего начислили 20+80=100, а списали 25+70=95. И никак не может остаться 10 бонусов после вычитания 100-95, даже если ни один бонус не успел сгореть. |