Некорректно выводятся поля в запросе

1. user1619761 30.05.24 11:11 Сейчас в теме
Добрый день. Помогите, пожалуйста, разобраться с запросом. Вывожу остатки за весь период по дням. Первая запись выводится верно, а дальше уже к остальным записям где были движения в начальный остаток прибавляется количество первой записи. Пример: 5 мая был приход 10 штук, расход 4, остаток начальный 0, конечный 6. Следующее движение по этой позиции было 10 мая. Приход 5, расход 2, начальный остаток 6, конечный 9. Еще одно движение было 12 мая. Приход 3, расход 0, начальный остаток 9, конечный 12. Запросом выводится в таком виде:
05.05.2024 Начальный остаток 0, Приход 10, Расход 4, Конечный остаток 6,
06.05.2024 Начальный остаток 6, Приход 0, Расход 0, Конечный остаток 6,
07.05.2024 Начальный остаток 6, Приход 0, Расход 0, Конечный остаток 6,
08.05.2024 Начальный остаток 6, Приход 0, Расход 0, Конечный остаток 6,
09.05.2024 Начальный остаток 6, Приход 0, Расход 0, Конечный остаток 6,
10.05.2024 Начальный остаток 12, Приход 5, Расход 0, Конечный остаток 17,
11.05.2024 Начальный остаток 17, Приход 0, Расход 0, Конечный остаток 17,
12.05.2024 Начальный остаток 23, Приход 3, Расход 0, Конечный остаток 26 и так далее.

Как сделать чтоб вышло так:

05.05.2024 Начальный остаток 0, Приход 10, Расход 4, Конечный остаток 6,
06.05.2024 Начальный остаток 6, Приход 0, Расход 0, Конечный остаток 6,
07.05.2024 Начальный остаток 6, Приход 0, Расход 0, Конечный остаток 6,
08.05.2024 Начальный остаток 6, Приход 0, Расход 0, Конечный остаток 6,
09.05.2024 Начальный остаток 6, Приход 0, Расход 0, Конечный остаток 6,
10.05.2024 Начальный остаток 6, Приход 5, Расход 2, Конечный остаток 9,
11.05.2024 Начальный остаток 9, Приход 0, Расход 0, Конечный остаток 9,
12.05.2024 Начальный остаток 9, Приход 3, Расход 0, Конечный остаток 12?

create temporary table dateList as (SEL ECT * FROM generate_series(
  (sel ect min(abs.date)  from account_bank_statement abs)::date, 
  now(), 
  '1 day'
));

create temporary table tempTable as (select
rc.name "company",
aj.name "bank",
resC.name "currency",
abs.date "date",
abs.balance_start "balance_start",
abs.total_entry_encoding,
abs.balance_end "balance_end",
CASE
    WHEN total_entry_encoding> 0 THEN total_entry_encoding
    WHEN total_entry_encoding<= 0 THEN 0
    END entry,
CASE
    WHEN total_entry_encoding< 0 THEN total_entry_encoding
    WHEN total_entry_encoding>= 0 THEN 0
    END outgoing

fr om
	account_bank_statement abs
left join
	res_company rc 
on 
	abs.company_id = rc.id
left join
	account_journal aj
on
	abs.journal_id = aj.id
left join
	res_currency resC
on
	aj.currency_id = resC.id
);

select
tempTable.company "Компания",
tempTable.bank "Банк",
tempTable.currency "Валюта",
dateList.generate_series "Дата",
case when dateList.generate_series = tempTable.date then
tempTable.balance_start
else tempTable.balance_end end "Остаток на начало",
tempTable.balance_end "Остаток на конец",
CASE 
when dateList.generate_series = tempTable.date then
tempTable.entry
else 0 end Приход,
CASE
when dateList.generate_series = tempTable.date then
tempTable.outgoing else 0 end Расход

fr om
	dateList dateList
left join 
	tempTable tempTable 
on
	tempTable.date <= dateList.generate_series
Показать
По теме из базы знаний
Найденные решения
3. Said-We 30.05.24 12:45 Сейчас в теме
Прикрепленные файлы:
user1619761; +1 Ответить
4. user1619761 30.05.24 14:56 Сейчас в теме
(3) Спасибо за наводку. Вот вроде бы рабочий вариант, буду пробовать https://onecompiler.com/postgresql/42er62jcb
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user1619761 30.05.24 12:01 Сейчас в теме
(1)
Первая запись выводится верно, а дальше уже к остальным записям где были движения в начальный остаток прибавляется количество первой записи. Пример: 5 мая был приход 10 штук, расход 4, остаток начальный 0, конечный 6. Следующее движение по этой позиции было 10 мая. Приход 5, расход 2, начальный остаток 6, конечный 9. Еще одно движение было 12 мая. Приход 3, расход 0, начальный остаток 9, конечный 12.
ошибся, к следующей записи прибавляется количество предыдущей записи (правильное количество). То есть работает сейчас так:
05.05.2024 Начальный остаток 0, Приход 10, Расход 4, Конечный остаток 6,
06.05.2024 Начальный остаток 6, Приход 0, Расход 0, Конечный остаток 6,
07.05.2024 Начальный остаток 6, Приход 0, Расход 0, Конечный остаток 6,
08.05.2024 Начальный остаток 6, Приход 0, Расход 0, Конечный остаток 6,
09.05.2024 Начальный остаток 6, Приход 0, Расход 0, Конечный остаток 6,
10.05.2024 Начальный остаток 12, Приход 5, Расход 0, Конечный остаток 17, //тут начальный остаток должен быть 6, прибавляется он и к начальному и к конечному (с учетом прихода выходит 17)
11.05.2024 Начальный остаток 17, Приход 0, Расход 0, Конечный остаток 17,
12.05.2024 Начальный остаток 26, Приход 3, Расход 0, Конечный остаток 29 и так далее. //тут начальный остаток должен быть 9, он прибавляется к конечному из предыдущей записи, с приходом конечный выходит 29
3. Said-We 30.05.24 12:45 Сейчас в теме
Прикрепленные файлы:
user1619761; +1 Ответить
5. user1619761 30.05.24 15:11 Сейчас в теме
(3) проверил, вариант из (4) работает. Спасибо еще раз
4. user1619761 30.05.24 14:56 Сейчас в теме
(3) Спасибо за наводку. Вот вроде бы рабочий вариант, буду пробовать https://onecompiler.com/postgresql/42er62jcb
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот