I need to split amounts in a table (transactions) accord to another related table information (bill_details).
Base table (transactions):
ID | amount | document_id |
---|---|---|
1 | 100.00 | 11 |
2 | 80.00 | 12 |
3 | 120.00 | 13 |
Another table (bill_details):
ID | amount | document_id | description |
---|---|---|---|
1 | 20.00 | 11 | A |
2 | 60.00 | 11 | B |
3 | 20.00 | 11 | C |
4 | 80.00 | 12 | D |
5 | 60.00 | 13 | E |
6 | 20.00 | 13 | F |
5 | 20.00 | 13 | G |
6 | 40.00 | 13 | H |
What I need:
amount (splited from transactions) | description (from row in description) |
---|---|
20.00 | A |
60.00 | B |
20.00 | C |
80.00 | D |
60.00 | E |
20.00 | F |
20.00 | G |
20.00 | H |
Notes: Sometimes the sum of ‘bill_details’ amount is not equal to the ‘transactions’ amount. A bill can have 0+ transactions.
should I keep trying to do it in MySQL or should I use PHP?
Advertisement
Answer
It’s bit complicate but in MySQL 8.0 you can use window function in next way:
SELECT description, bill_details.amount + least( transactions.amount - SUM(bill_details.amount) OVER (PARTITION BY document_id ORDER BY bill_details.ID), 0 ) amount FROM bill_details JOIN transactions USING(document_id) ORDER BY bill_details.ID