Entwickler-Ecke
Datenbanken - MAX und Min ohne Group-by?
motion - So 09.03.08 19:47
Titel: MAX und Min ohne Group-by?
In eine bestehende SELCT Abfrage (in einer Detail-Tabelle) brauche ich noch die Max und Min-Werte der letzten Einkaufspreise
SQL-Anweisung
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| SELECT ,DATUM , TEXT , EFFEKPREIS , REF0 , max(effekpreis), min(effekpreis) FROM EINKAUFHISTORIE where ref0=44879 order by datum desc |
Leider ist diese Angabe so syntaktisch nicht korrekt (Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).
Wie muss ich obiges SELECT modifizieren, damit ich die gewünschte Ausgabe bekomme?
matze - Mo 10.03.08 10:44
Ja die Fehlermeldung gibt dir ja schon den Hinweis drauf, was nicht stimmt.
Du kannst Min oder Max nur bei einer "aggregate function" oder in Verbindung mit einer GROUP BY Klausel nutzen und nicht in diesem Query.
Ich würde dir empfelne, dass du die MIN und MAX Werte in einem neuen Statement abfrägst.
mkinzler - Mo 10.03.08 11:41
Oder als Subquery/Join
motion - Mo 10.03.08 13:32
Leider ist das eine Detail-Query einer Master-Detail Beziehung, welche von IBO automatisch bei Wechsel/Aktualisierung des Masters aktualisiert wird. Dadurch habe ich achf keinen direkten Zugriff auf die Where-Bedingung, die gesetzt wird (z.B. für eine Subquery). Ich brauche die Max/Min Werte bereits im Resultset dieser Query, um die Darstellung des Grids richtig zu steuern (die billigsten und teuersten EffEKpreise der letzten 2 Jahre sollen grün bzw. rot hervorgehoben werden) grüble ich jetzt noch, wie sich das am einfachsten und geschicktesten einflechten läßt.
Mal schauen ...
Wenn ich eine Lösung habe, poste ich sie hier.
mkinzler - Mo 10.03.08 13:59
Auch wenn man sich die Master/Detail-Abfrage hat automatisch erzeugen lassen, kann man diese manuell abändern/ergänzen.
motion - Mo 10.03.08 15:47
mkinzler hat folgendes geschrieben: |
| Auch wenn man sich die Master/Detail-Abfrage hat automatisch erzeugen lassen, kann man diese manuell abändern/ergänzen. |
Zweifellos. Aber die Parameternamen für die Parameter sind mir hier nicht klar.
Der SELECT des SQL sieht so aus:
SQL-Anweisung
1: 2: 3: 4: 5: 6:
| SELECT REF ,DATUM , TEXT , EFFEKPREIS , REF0 FROM EINKAUFHISTORIE |
Der Masterlink heißt "EINKAUFHISTORIE.REF0=LAGERKARTE.REF"
Was da jetzt im Endeffekt zur Laufzeit für eine SQL-Anweisung draus wird, muss ich erst noch mal untersuchen. Ich brauche den Parameter für den FK, damit ich diesen in den Subqueries benutzen kann.
motion - Do 13.03.08 23:28
So sieht jetzt meine Lösung aus ...
SQL-Anweisung
1: 2: 3: 4: 5: 6: 7:
| select eh.*,mm.* from einkaufhistorie eh join ( select min(effekpreis) as MINI,max(effekpreis) as MAXI, min(ref0) as ref0temp from einkaufhistorie where ref0=:ref ) mm on mm.ref0temp=eh.ref0 where eh.ref0=:ref order by eh.datum desc |
Damit ist das Problem gelöst ...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!