WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   SQL Zeilendifferenzen (http://www.wcm.at/forum/showthread.php?t=220043)

kingchaos01 23.07.2007 11:00

SQL Zeilendifferenzen
 
Hallo!
Ich habe einige SQL-Tabellen, etwa folgenden Aufbaus:

Code:

feld1 feld2
1    2
2    2,4
3    3,2
4    4,5
...

Ich bräuchte nun die Differenz zwischen den Zeilen in einer neuen Spalte, also etwa so:

Code:

feld1 feld2 Diff
1    2    0
2    2,4  0,4
3    3,2  0,8
4    4,5  1,3
...

Geht das in SQL oder muss ich das über eine Schleife rundherum lösen?
fragt sich
roland

pong 23.07.2007 20:03

select feld1, feld2, (feld2 - feld1) as diff from irgendwo

pong

kingchaos01 23.07.2007 20:54

Und wie heißt's so schön: Wer lesen kann, ist klar im Vorteil!
:(

pong 23.07.2007 20:58

Zitat:

Original geschrieben von kingchaos01
Und wie heißt's so schön: Wer lesen kann, ist klar im Vorteil!
:(

google nutzen auch :rolleyes:

http://www.adp-gmbh.ch/ora/sql/inser..._subquery.html

pong

The_Lord_of_Midnight 23.07.2007 21:40

Beschreibe genauer, von wo die Differenz genau berechnet werden soll.
Denn die Differenz zwischen 1 und 2 ist nicht 0.

kingchaos01 23.07.2007 22:40

Nicht böse sein, aber wie soll man das noch genauer beschreiben: Die Differenz zwischen zwei aufeinanderfolgenden Zeilen?

Zwischen 2 und 2,4 ist 0,4 Differenz.
Zwischen 2,4 und 3,2 ist 0,8 Differenz.
...
...
...
Zeile(n) - Zeile(n-1)

void 23.07.2007 22:46

klar geht das, aber kompliziert... aber vielleicht weiß ja jemand einen einfachen weg

The_Lord_of_Midnight 24.07.2007 08:42

Zitat:

Original geschrieben von kingchaos01
Nicht böse sein, aber wie soll man das noch genauer beschreiben: Die Differenz zwischen zwei aufeinanderfolgenden Zeilen?

Man könnte es klarer formulieren.
Warum bringst du da 2 Felder ?
Was meinst du GENAU mit der Differenz ?
Differenz zwischen was ?

Man kann erst an einer Problemlösung arbeiten, wenn man eine klare Problembeschreibung hat.

Meinst du das so:
Zeile1: Feld1+Feld2=Summe1
Zeile2: Feld1+Feld2=Summe2
Zeile3: Feld1+Feld2=Summe3

Differenz Zeile1 = Summe 1 - Summe 2 ?
Differenz Zeile2 = Summe 2 - Summe 3 ?

kingchaos01 24.07.2007 08:51

ok, vergiss einmal Feld1. Das hab ich drin, weil es ja eine Reihenfolge der Zeilen geben muss. Ich will ja nicht die Differenz zwischen Zeile1 und Zeile7 berechnen, sondern schön hintereinander Zeile2 minus Zeile1, Zeile3 minus Zeile2, Zeile4 minus Zeile3 usw.
eben wie beschrieben Zeile(n) minus Zeile(n-1).

Und die Differenz ist das Ergebnis einer Subtraktion (sagt die Wikipedia).

Wer MatLab kennt, kennt vielleicht den Befehl "diff".
Gernau das auf SQL bezogen.
Weil hier offenbar auf genaue Definitionen Wert gelegt wird, hier noch eine Begriffsbestimmung, wie MatLab das sieht:

"Y = diff(X) calculates differences between adjacent elements of X.

If X is a vector, then diff(X) returns a vector, one element shorter than X, of differences between adjacent elements:

[X(2)-X(1) X(3)-X(2) ... X(n)-X(n-1)]"

es grüßt
Roland

void 24.07.2007 09:30

ich denke nicht, dass sql zeilenbasiert - wie von dir gewünscht - arbeiten kann.

du kannst dir den effekt aber selber zusammenbauen:
lese 1.zeile, merk dir den wert des gewünschten feldes, lese nächste zeile und wende dein diff auf das vorher gemerkte feld und das gewünschte feld dieser zeile an und speichere das ergebnis als neues feld...

wenn man geschickt ist, bekommt man das hin (in einem statement) :D


Alle Zeitangaben in WEZ +2. Es ist jetzt 03:38 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag