GOOGLE ADS

Donnerstag, 28. April 2022

MySQL, wie man die Spalte mit der vorherigen Spaltensumme summiert und nach einer anderen Spalte gruppiert

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
Geben Sie hier die Bildbeschreibung ein


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

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...