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-Key: 103873

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

Printed on: April 19, 2024 at 11:04 o'clock

Member: Logan000
Logan000 Dec 11, 2008 at 13:20:05 (UTC)
Goto Top
Moin Moin

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

Gruß L.
Member: Supergecko
Supergecko Dec 11, 2008 at 13:47:26 (UTC)
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
Mitglied: 70620
70620 Dec 11, 2008 at 14:09:32 (UTC)
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
Member: Supergecko
Supergecko Dec 11, 2008 at 14:31:32 (UTC)
Goto Top
Nein, da Wert2 von ID 3 ja nicht größer ist als Wert1 von ID4, meine bedingung wäre nicht erfüllt
Mitglied: 32067
32067 Dec 11, 2008 at 14:38:15 (UTC)
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 ...
Member: Supergecko
Supergecko Dec 11, 2008 at 14:43:54 (UTC)
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?
Member: Supergecko
Supergecko Dec 11, 2008 at 16:35:55 (UTC)
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...
Member: Biber
Biber Dec 11, 2008 at 19:58:14 (UTC)
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
Member: Supergecko
Supergecko Jan 12, 2009 at 07:52:54 (UTC)
Goto Top
Super!
Danke hat geklappt.
(Dier Rückmeldung kommt etwas spät, aber ich war bis heute im Urlaub)
Also nochmals Danke.