Я хочу построить SQL-запрос, который может суммировать суммы взносов по месяцам. Обычно это не было бы слишком сложно, поскольку вы просто суммировали бы суммы взносов и group by
month. Однако проблема не так проста, и в оставшейся части поста я проиллюстрирую причину и получу любую помощь, которую люди могут предложить.
Сначала важно отметить столбец installments
. Где installments
равно 1, это означает, что общая стоимость выплачивается во время покупки. Если installments
больше 1, это означает, что общая стоимость выплачивается в текущем и последующих месяцах. Например, если мы видим transaction_id
9 и 10, это транзакция стоимостью 100 долларов США, состоящая из двух частей, что означает, что 50 долларов будут выплачены в феврале, а 50 долларов - в марте.
Учтите, что мы хотим видеть ежемесячные счета за credit_card_id = 11111111
. Если мы посмотрим на столбец installments
, то увидим, что правильный вывод должен быть следующим:
- Январь: 19,99 + 75,3
- Февраль: 1337 + 75,3
- март: 75,3
Опять же, для ясности, 75,3 в марте происходит потому, что в январе у нас была транзакция с 3 частями, то есть с клиента будет взиматься 75,3 в январе, феврале и марте. Проблема в том, что я не знаю, как создать категорию для марта на основе данных.

Во-первых, я заново создал таблицу в SQL и легко смог получить все транзакции для карты по месяцам с помощью следующего запроса SQLite
select strftime('%m', transaction_date) as Month, total_value, installment_value, installments
from transactions
WHERE credit_card_id = '11111111';
который выводит таблицу, которая выглядит следующим образом 
Однако было неочевидно, как разделить 3 периода рассрочки на 01, 02 и 03, поэтому я создал новую таблицу со столбцом txn
, которая предназначена для присвоения идентификатора уникальным транзакциям, которые могут считаться 1 группой.
CREATE TABLE transactions (
transaction_id int primary key,
credit_card_id int,
transaction_date timestamp,
merchant_name varchar(256),
total_value decimal(19,4),
installment_value decimal(19,4),
installments int,
txn int
);
insert into transactions values(1,11111111,'2018-01-10T00:00:00','Colorful Soaps', 19.99, 19.99, 1, 1);
insert into transactions values(2,22222222,'2018-01-11T00:01:00','Cantina da Mamma',43.5,43.5,1,2);
insert into transactions values(3,33333333,'2018-01-12T01:02:00','Boulevard Hotel',129,129,1,3);
insert into transactions values(4,11111111,'2018-01-15T11:11:11','Micas Bar',225.9,75.3,3,4);
insert into transactions values(5,11111111,'2018-01-15T11:11:11','Micas Bar',225.9,75.3,3,4);
insert into transactions values(6,11111111,'2018-01-15T11:11:11','Micas Bar',225.9,75.3,3,4);
insert into transactions values(7,22222222,'2018-01-18T22:10:01','IPear Store',9999.99,9999.99,1,5);
insert into transactions values(8,11111111,'2018-02-20T21:08:32','Forrest Paintball',1337,1337,1,6);
insert into transactions values(9,44444444,'2018-02-22T00:05:30','Unicorn Costumes',100,50,2,7);
insert into transactions values(10,44444444,'2018-02-22T00:05:30','Unicorn Costumes',100,50,2,7);
Мои вопросы
- Можно ли получить выходные данные формата, который я определил выше, в SQLite, и если да, то как?
- Должен ли я иметь столбец
txn
, чтобы получить эту информацию?
Спасибо за вашу помощь.