(SQL) Anzeige der größten ID
Janko Wellmeier
- datenbank
Hallo,
ich habe ein Problem, hinter dessen Lösung ich einfach nicht komme.
Ich möchte Daten aus 2 Tabellen, innerhalb einer Datenbank, verknüpft auslesen. Das klappt dank Left Join aus hervorragend. Nun möchte ich aber in dem gleichen RecordSet ein Feld definieren, welches mir den größten Wert aus dem Feld "fldID" in diesem RecordSet zurückgibt.
Mein SQL-String sieht so aus:
"SELECT tblOrderPosition.fldID, tblOrderPosition.fldArticleID, tblOrderPosition.fldOrderID, MAX(tblOrderPosition.fldID) AS [MaxfldID] FROM tblOrderPosition LEFT JOIN tblOrder ON tblOrderPosition.fldOrderID = tblOrder.fldID WHERE tblOrder.fldSetUpBy=965698197 GROUP BY tblOrderPosition.fldID,tblOrderPosition.fldArticleID,tblOrderPosition.fldOrderID"
Das kniffelige ist nun "MAX(tblOrderPosition.fldID) AS [MaxfldID]".
Ein Beispiel:
Ich kriege mit dieser SQL ein RecordSet, welches 2 Datensätze enthält. Der Erste hat die "fldID" 690 und der Zweite die 691. Ich würde nun erwarten, egal in welchem Datensatz ich mich in diesem RecordSet aufhalte, daß ich bei dem Feld "MaxfldID" immer 691 zurückbekomme. Dem ist aber nicht so. Ich bekomme eigentlich immer nur die aktuelle "fldID" zurück.
Habe ich einen falschen Syntax benutzt, oder ist mein Denkansatz einfach falsch??
Vielen Dank für Eure Hilfe
MfG
JankoW
Hallo,
ich habe ein Problem, hinter dessen Lösung ich einfach nicht komme.
Ich möchte Daten aus 2 Tabellen, innerhalb einer Datenbank, verknüpft auslesen. Das klappt dank Left Join aus hervorragend. Nun möchte ich aber in dem gleichen RecordSet ein Feld definieren, welches mir den größten Wert aus dem Feld "fldID" in diesem RecordSet zurückgibt.
JankoW
Hay JankoW,
Ich hab die Sache etwas anderst gelöst.
In der Datenbank mache ich eine Abfrage auf 2 Tabellen.
Die Abfrage lasse ich nach der gewünschten Spalte Sortieren und greife dann einfach auf die Erste Zeile zu.
War für meine Anforderung einfacher.
Gruß Svend
Hallo !
Ein Beispiel:
Ich kriege mit dieser SQL ein RecordSet, welches 2 Datensätze enthält. Der Erste hat die "fldID" 690 und der Zweite die 691. Ich würde nun erwarten, egal in welchem Datensatz ich mich in diesem RecordSet aufhalte, daß ich bei dem Feld "MaxfldID" immer 691 zurückbekomme. Dem ist aber nicht so. Ich bekomme eigentlich immer nur die aktuelle "fldID" zurück.
Habe ich einen falschen Syntax benutzt, oder ist mein Denkansatz einfach falsch??
Ich tippe auf letzteres. ;-)
Wenn ich nicht völlig falsch liege, liefert max() hier den höchsten Wert _innerhalb_ der Gruppierung, nicht den der gesamten Ergebnismenge. Versuch es einmal mit anderen Aggregat(?)-funktionen wie z.B. count() oder sum(), dann sollte dies schnell klar werden.
Wenn du den Höchstwert unbedingt bereits vor der Ausgabe des letzten Datensatzes brauchst, hilft m.E. nur, eine eigene selct-Abfrage vorauszuschicken, ansonsten müsste der letzte zurückgegebene Datensatz gleichzeitig den Höchstwert liefern.
HTH
Gruß,
kerki
Hi,
also es ist leider wahr. Max, Count etc. bezieht sich immer nur auf die Werte in der Gruppierung. Schade.
Dann muß ich das eben anders lösen.
Vielen Dank für Eure Hilfe.
MfG
Jankow
Hi Jankow
Dann kannst Du aber trotzdem mit einem geschachtelten SELECT-Statement die Max-ID über das ganze Recordset abfragen.
SELECT tblOrderPosition.fldID, tblOrderPosition.fldArticleID, tblOrderPosition.fldOrderID,
(SELECT MAX(fldID) FROM DeineTabelle WHERE ...Bedingung für gesammtes Recordset...) AS [MaxfldID]
FROM tblOrderPosition
LEFT JOIN tblOrder ON tblOrderPosition.fldOrderID = tblOrder.fldID
WHERE tblOrder.fldSetUpBy=965698197
GROUP BY tblOrderPosition.fldID,tblOrderPosition.fldArticleID,tblOrderPosition.fldOrderID
Ein Teil der SQL-Engines (z.B MS-Sql, wahrscheinlich aber auch Sybase und Oracle) unterstützen diese geschachtelten SELECT-Statements.
Grüsse
Eisbär