Hi, ich suche wiedermal Hilfe zu einer SQL Abfrage.
Ich habe eine Tabelle mit einer Spalte "Einnahmen" und einer Spalte "Ausgaben". Nun möchte ich eine dritte Spalte mit dem errechneten Saldo je Zeile. Ist das möglich?
mfg Anwender
Programmieren - alles kontrollieren 4.935 Themen, 20.621 Beiträge
Einnahmen - Ausgaben = Saldo. Beim nächsten Datensatz dann: Den Saldo des vorherigen Datensatzes + Einnahmen - Ausgaben = neuer Saldo. Und das die ganze Tabelle durch. [...] Ist das so überhaupt möglich in einer Abfrage zu lösen?
Ja, mit Subselects wäre das möglich - wird aber eine extrem teure Abfrage (zumindest bei größeren Tabellen. Mit 100 Datensätzen mag das noch laufen, mit 10000 macht es aber sicher keinen Spaß mehr das Warten). Zwingend notwendig dafür wäre noch ein Unique Feld aus dem sich dann die Sortierreihenfolge ergeben würde. Am einfachsten wäre da ein AutoInc-Feld, dann hat man auch gleich die Insert-Reihenfolge der Datensätze.
Die Abfrage sähe dann so aus:
SELECT ein, aus, (SELECT SUM(ein)-SUM(aus) FROM table WHERE id FROM table AS t
ORDER BY id ASC
Da zumindest bei den hinteren Datensätzen ein FullTable-Scan im Subselct zu erwarten ist wäre zu prüfen ob bei diesem eine vorsortierung der Tabelle zur optimierung berücksichtig wird. Das kann je nach DB-Server unterschiedlich aussehen.
Zu bevorzugen wäre auf jeden Fall eine berchnung im Client, da man dort ein lineares Laufzeitverhalten erwarten kann. Bei meiner SQL-Abfrage ist ein qudratisches Laufzeitverhalten zu erwarten!
Gruß
Borlander
Ja, mit Subselects wäre das möglich - wird aber eine extrem teure Abfrage (zumindest bei größeren Tabellen. Mit 100 Datensätzen mag das noch laufen, mit 10000 macht es aber sicher keinen Spaß mehr das Warten). Zwingend notwendig dafür wäre noch ein Unique Feld aus dem sich dann die Sortierreihenfolge ergeben würde. Am einfachsten wäre da ein AutoInc-Feld, dann hat man auch gleich die Insert-Reihenfolge der Datensätze.
Die Abfrage sähe dann so aus:
SELECT ein, aus, (SELECT SUM(ein)-SUM(aus) FROM table WHERE id FROM table AS t
ORDER BY id ASC
Da zumindest bei den hinteren Datensätzen ein FullTable-Scan im Subselct zu erwarten ist wäre zu prüfen ob bei diesem eine vorsortierung der Tabelle zur optimierung berücksichtig wird. Das kann je nach DB-Server unterschiedlich aussehen.
Zu bevorzugen wäre auf jeden Fall eine berchnung im Client, da man dort ein lineares Laufzeitverhalten erwarten kann. Bei meiner SQL-Abfrage ist ein qudratisches Laufzeitverhalten zu erwarten!
Gruß
Borlander