Innnerhalb einer Spalte Werte vergleichen

Hallo Leute,
kann man bei einer MySQL Abfrage eine Spalte zweimal nebeneinander darstellen, dass die zweite spalte immer um 2 Zeilen versetzt zur ersten steht. Ich brauch dies um in einer Spalte einen Wert immer mit dem zu vergleichen, der darunter steht. Für eine Beispielabfrage währ ich sehr dankbar.

Gruß der Mike

Moin, Mike,

kann man bei einer MySQL Abfrage eine Spalte zweimal
nebeneinander darstellen, dass die zweite spalte immer um 2
Zeilen versetzt zur ersten steht.

man soll niemals nie sagen, hier wage ich es dennoch: nein, das geht nicht. SQL, egal welches, ist keine Tabellenkalkulation, deshalb kann die Zeile, in der ein Ergebniswert steht, nicht im Voraus bestimmt werden.

Beschreib mal die Datenstruktur und das, was Du an Information daraus ziehen willst, dann kann Dir bestimmt jemand auffet Ferd helfen.

Gruß Ralf

Hallo Ralf,
Hallo Mike,

tatsächlich sage niemals nie :smile:. Doch theoretisch sollte dies gehen, denn MySQL kann die Zeilen einer Abfrage auch nummerieren. Nur SQL garantiert nicht eine Reihenfolge der Antwortzeilen, also funktioniert das Vorgehen nur wenn die Reihenfolge fest „von aussen“ vorgegeben ist (z.B. durch eine Sortierung mittels order by). Ggf. muss man eine Extra-Tabelle für das Zwischenergebnis spendieren. Aber Mike> Du hast Dich noch nicht geäußerst, wass denn in Zeile 1 und 2 erscheinen soll (Beispiel: Ergebnis a, b, c, d)

1 a 
2 b
3 c a
4 d b
5 c
6 d

Ist dies das gewünschte Ergebnis?

MfG Georg V.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Moin, Georg,

theoretisch sollte dies gehen, denn MySQL kann die Zeilen
einer Abfrage auch nummerieren.

das schaffe ich mit Access auch, wenn irgendein Ident vorhanden ist (und vermutlich mit jedem anderen SQL). Ob sich damit die Frage erschlagen lässt, werden wir erst erfahren, wenn Klarheit über die Anforderung herrscht. Ich bin da nicht sehr zuversichtlich.

Gruß Ralf

Hallo Ralf,

da Mike auf sich warten läßt und ich gerade eine Tabelle test mit zufällig vier nummerischen Werten om Attribut test (ja zufällig und halt eine Testtabelle) gefunden habe, hier ist die Query:

SET @cnt0 = 0;
SET @cnt1 = 0;
SET @cnt2 = 0;
SET @cnt3 = 0;


select lfdnr, test, lfdnr1, test1 
 from (select (@cnt1:=(@cnt1+1)) as lfdNr, test as test from `test` ORDER by test) a left join
 (select (@cnt0:=(@cnt0+1))+2 as lfdNr1, test as test1 from `test` ORDER by test) b
 on a.lfdnr=b.lfdnr1
union
select lfdnr, test, lfdnr1, test1 
 from (select (@cnt3:=(@cnt3+1)) as lfdNr, test as test from `test` ORDER by test) a right join
 (select (@cnt2:=(@cnt2+1))+2 as lfdNr1, test as test1 from `test` ORDER by test) b
 on a.lfdnr=b.lfdnr1
;

lfdnr test lfdnr1 test1
1 -3.05 NULL NULL
2 -1.56 NULL NULL
3 1.23 3 -3.05
4 3.12 4 -1.56
NULL NULL 5 1.23
NULL NULL 6 3.12

MfG Georg V.

1 a
2 b
3 c a
4 d b
5 c
6 d
Ist dies das gewünschte Ergebnis?

Ja genau. So soll es aussehen.
Gruß Mike

SET @cnt0 = 0;

Das sieht gut aus. Mit „@“ hab ich bisher noch nicht gearbeitet. Sind das eine Art Zeiger oder indirekte Adressierungen?
Mike

Hallo Mike,

Eher benutzerdefinieret Variable siehe http://dev.mysql.com/doc/refman/5.1/de/user-variable…

MfG Georg V.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Danke für eure Hilfe, aber ich habe die Sortierung jetzt doch über ein externes Programm realisiert.

Mike