Hallo,
ich habe folgendes Problem:
In einer Schulklasse werden die Schulnoten eines jeden Schülers gespeichert. Ich möchte nun eine Abfrage machen, die mir innerhalb einer Zeitspanne die LETZTE SCHLECHTESTE Schulnote alle Schüler raussucht. Jede Zeile entspricht einer Schulnote eines bestimmten Schülers an einem bestimmten Tag. Somit können an einem Tag auch mehrere Schulnoten für einen Schüler eingetragen sein.
Ich würde es wie folgt lösen:
Kann ich dieses Statement nun irgendwie umformulieren, dass ich das selbe Ergebnis auch OHNE join bekomme? Das Statement wird noch sehr groß, da mehrere Zeiträume miteinander verrechnet werden müssen. Das würde der Übersichtlichkeit helfen und vllt sogar der Performance.
Ich nutze Postgres.
Gruß, Tommy
ich habe folgendes Problem:
In einer Schulklasse werden die Schulnoten eines jeden Schülers gespeichert. Ich möchte nun eine Abfrage machen, die mir innerhalb einer Zeitspanne die LETZTE SCHLECHTESTE Schulnote alle Schüler raussucht. Jede Zeile entspricht einer Schulnote eines bestimmten Schülers an einem bestimmten Tag. Somit können an einem Tag auch mehrere Schulnoten für einen Schüler eingetragen sein.
Ich würde es wie folgt lösen:
Code:
SELECT
x1.schueler_id,
x1.maxdate,
MAX(x2.note) as maxnote
FROM
(SELECT
schueler_id,
MAX(datum) AS maxdatum
FROM
schulnoten
WHERE
datum BETWEEN (DATE ( '2011-11-01' ) - INTERVAL '2 weeks') AND '2011-11-01'
GROUP BY
schueler_id) x1
INNER JOIN
schulnoten x2
ON
x1.schueler_id = x2.schueler_id
AND
x1.maxdate = x2.datum
GROUP BY
x1.schueler_id,
x1.maxdate
Kann ich dieses Statement nun irgendwie umformulieren, dass ich das selbe Ergebnis auch OHNE join bekomme? Das Statement wird noch sehr groß, da mehrere Zeiträume miteinander verrechnet werden müssen. Das würde der Übersichtlichkeit helfen und vllt sogar der Performance.
Ich nutze Postgres.
Gruß, Tommy