Axel Richter: select max() geht nicht

Beitrag lesen

Hallo,

Es ist daher Unsinn in diesem konkreten Beispiel, das unverändert bleibende Datenfeld "Ort" aus WHERE in HAVING zu verlagern. Das führt nur dazu, dass außer dem gewählten Ort auch alle anderen Orte in die Gruppierungsphase einfließen,

Das tun sie, je nach internem Ablauf in der Datenbank, sowieso. Kennst Du Dich wirklich so gut mit den DB-Interna aus, dass Du das so behaupten kannst?

MS Access SQL bringt jedenfalls bei

SELECT id, Ort, Max(woche) AS MaxWoche, Max(Jahr) AS MaxJahr
FROM Tabelle2
WHERE Ort = "o1"
GROUP BY id;

die Fehlermeldung, dass nicht nach Ort gruppiert wird. Das ist ja auch richtig, da Ort als Feld direkt angesprochen wird und nicht per Aggregatfunktion. Es _könnte_ aber auch darauf hinweisen, dass trotz WHERE, welches ja _einen_ Ort vorgibt, eben immer _erst_ gruppiert wird. Wie gesagt, müsste man hier sehr tief in den DB-Interna stecken, um das endgültig bewerten zu können.

und am Ende mit dem HAVING wieder herausgefiltert werden - das bringt keine Ergebnisveränderung unter dem Strich, aber bei großen Tabellen erheblich mehr Rechenaufwand.

Ja? Meiner Meinung nach hängt das sehr von den Implementierungen der Query-Optimizer der einzelnen DBs ab, siehe oben.

viele Grüße

Axel