Ich habe eine ungewöhnliche Situation, in der ich einige Spalten als Ergebnis anzeigen und eine Spalte (Einheiten) aus dem vorherigen Ergebnis in einer Spalte summieren muss. Aber nur, solange der Aktienwertcode den gleichen Wert hat, andernfalls die Summe neu starten.
Das habe ich bisher geschrieben
SELECT
trades.tx_date,
trades.stock_code,
trades.currency,
trades.units,
( @sum:= @sum + units ) AS unit_bal_total
FROM
trades
CROSS JOIN ( SELECT @sum:= 0 ) params
ORDER BY
trades.stock_code ASC,
trades.tx_date ASC
Dieses Bild auf der rechten Seite ist das, was ich zu erreichen versuche, und auf der linken Seite ist das, was ich bekomme, und Hilfe wäre willkommen
Lösung des Problems
Sie können eine Abfrage wie folgt versuchen:
SELECT tx_date
, SUBSTRING_INDEX(@old:=IF(SUBSTRING_INDEX(@old,";",1) = stock_code, CONCAT(stock_code,";0"), CONCAT(stock_code,";1")),";",1) AS stock_code
, units
, IF ( SUBSTRING_INDEX(@old,";",-1) = 1, @sum:= units, @sum:= @sum + units) AS units_bal_total
FROM trades
CROSS JOIN (SELECT @old:="", @sum:= 0) AS params
ORDER BY
trades.stock_code ASC,
trades.tx_date ASC;
Probe
MariaDB [bernd]> SELECT * from trades;
+----+------------+------------+-------+
| id | tx_date | stock_code | units |
+----+------------+------------+-------+
| 1 | 2020-11-09 | A2M | 100 |
| 2 | 2020-11-11 | A2M | -50 |
| 3 | 2020-11-12 | AAA | 500 |
| 4 | 2020-11-13 | AAA | 50 |
| 5 | 2020-11-14 | AAA | -100 |
| 6 | 2020-11-15 | ABC | 999 |
+----+------------+------------+-------+
6 rows in set (0.000 sec)
MariaDB [bernd]> SELECT tx_date
->, SUBSTRING_INDEX(@old:=IF(SUBSTRING_INDEX(@old,";",1) = stock_code, CONCAT(stock_code,";0"), CONCAT(stock_code,";1")),";",1) AS stock_code
->, units
->, IF ( SUBSTRING_INDEX(@old,";",-1) = 1, @sum:= units, @sum:= @sum + units) AS units_bal_total
-> FROM trades
-> CROSS JOIN (SELECT @old:="", @sum:= 0) AS params
-> ORDER BY
-> trades.stock_code ASC,
-> trades.tx_date ASC;
+------------+------------+-------+-----------------+
| tx_date | stock_code | units | units_bal_total |
+------------+------------+-------+-----------------+
| 2020-11-09 | A2M | 100 | 100 |
| 2020-11-11 | A2M | -50 | 50 |
| 2020-11-12 | AAA | 500 | 500 |
| 2020-11-13 | AAA | 50 | 550 |
| 2020-11-14 | AAA | -100 | 450 |
| 2020-11-15 | ABC | 999 | 999 |
+------------+------------+-------+-----------------+
6 rows in set (0.001 sec)
MariaDB [bernd]>
Keine Kommentare:
Kommentar veröffentlichen