supergecko
Goto Top

Datensätze vergleichen innerhalb einer SQL - Tabelle

Hallo liebe Community,
Ich habe mal wieder ein Problem bei einer SQL Abfrage.

Ich habe folgenden Tabellenaufbau in Access:

ID Datum Wert1 Wert2 Name
1 20081210 5,2 4,8 Bla
2 20081211 4,7 4,5 Bla
3 20081212 4,8 4,4 Myl
4 20081213 4,4 4,2 Myl
... ... ... ... ...

Ich möchte nun überprüfen wann der Wert2 von dem Datensatz ID1 größer ist als der Wert1 von dem Datensatz ID2.
Bei diesem Beispiel soll folgendes ausgegeben werden:


ID Datum Wert1 Wert2 Name
2 20081211 4,7 4,5 Bla

Wie muss ich meine SQL Abfrage gestalten damit ich zu diesem Ergebnis komme?

Mfg,
Supergecko

Content-ID: 103873

Url: https://administrator.de/contentid/103873

Ausgedruckt am: 22.11.2024 um 20:11 Uhr

Logan000
Logan000 11.12.2008 um 14:20:05 Uhr
Goto Top
Moin Moin

Du möchtest immer nur die Datensätze ID=1 und ID=2 miteinander vergleichen?

Gruß L.
Supergecko
Supergecko 11.12.2008 um 14:47:26 Uhr
Goto Top
Nein, die Tabelle umfasst ca. 4 Millionen Datensätze, das oben ist nur ein Beispiel,
ich will sinngemäß:

Wenn Wert2 von ID i größer als Wert1 von ID i+1
dann gebe ID i+1 aus.

// i ist Platzhalter für eine ID, und i+1 logischerweise die nachfolgende ID

Hoffe habs jetz deutlicher gemacht.
MFG Supergecko
70620
70620 11.12.2008 um 15:09:32 Uhr
Goto Top
müsste in deinem Beispiel dann nicht Zeile 4 als Ausgabe kommen?

Dann könntest aj einfach "SELECT MAX(ID) FROM table" schreiben
Supergecko
Supergecko 11.12.2008 um 15:31:32 Uhr
Goto Top
Nein, da Wert2 von ID 3 ja nicht größer ist als Wert1 von ID4, meine bedingung wäre nicht erfüllt
32067
32067 11.12.2008 um 15:38:15 Uhr
Goto Top
Fehlt dir nur das Stichwort "Self Join" ?

SELECT t2.id + 1
FROM tabelle as t1, tabelle as t2
WHERE t1.id = t2.id + 1 AND t1.wert2 > t2.wert1

(So in etwa zumindest)

Bei so Joins mit so großen Tabellen sollte man aber vorher lieber mal mit einem kleineren Datenbestand entwickeln und auch genau Abfragepläne und Indices durchgehen sonst legt man den Server auch schonmal lahm ...
Supergecko
Supergecko 11.12.2008 um 15:43:54 Uhr
Goto Top
hi DKrause,
danke für deine antwort, allerdings rede ich nur von einer tabelle,
dein Script benötigt aber 2 tabellen, t1 und t2 oder versteh ich das falsch?
Supergecko
Supergecko 11.12.2008 um 17:35:55 Uhr
Goto Top
Hallo vielen dank für die Nachricht.

Die Idee ist nicht schlecht, allerdings haben wir zu zweit unsere Köpfe zerbrochen ob dies unser Ergebnis ergibt.
Wir haben im Test durch deinen Vorschlag ein Ergebnis erhalten, bei der die ID Konstant ist. D.h. es wird unendlichmal ein und die selbe Zeile dargestellt.


Wir haben aus unserer Tabelle mit deinem Code:

ID Datum Wert1 Wert2 Name
1 20081210 5,2 4,8 Bla
2 20081211 4,7 4,5 Bla
3 20081212 4,8 4,4 Myl
4 20081213 4,4 4,2 Myl

das hier rausbekommen:

ID Datum Wert1 Wert2 Name
2 20081210 5,2 4,8 Bla
2 20081210 5,2 4,8 Bla
2 20081210 5,2 4,8 Bla
2 20081210 5,2 4,8 Bla

Was nicht ganz dem gewünschten Ergebnis entspricht.
  • Der Kollege liest schon das neue Testament*
Bitte helft ihm...
Biber
Biber 11.12.2008 um 20:58:14 Uhr
Goto Top
Moin Supergecko,
Der Kollege liest schon das neue Testament*
Bitte helft ihm...
Na ja... es entspricht mehr meiner Mentalität, ihn ein bissi schmoren zu lassen... hihihi..


SELECT t2.* 
FROM Werte as t1, Werte as t2
WHERE( t1.id+1  = t2.id ) AND t1.wert2 > t2.wert1 ;
Bei mir heißt die Tabelle "Werte"

Ein bisschen aussagefähiger wäre die Query so:
SELECT t2.ID, t2.Datum,  t1.wert2 as Vortagswert2, 
t2.wert1 as Tageswert1, t2.wert2 as Tageswert2, t2.name
FROM Werte AS t1, Werte AS t2
WHERE (t1.id+1=t2.id) And t1.wert2>t2.wert1;

Grüße
Biber
Supergecko
Supergecko 12.01.2009 um 08:52:54 Uhr
Goto Top
Super!
Danke hat geklappt.
(Dier Rückmeldung kommt etwas spät, aber ich war bis heute im Urlaub)
Also nochmals Danke.