2Danke
ERLEDIGT
JA
JA
ANTWORTEN
6
6
ZUGRIFFE
314
314
EMPFEHLEN
-
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:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
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
-
Ich werde gerade nicht so schlau, was du möchtest. Du willst von jeden Schüler die schlechteste Note in einem bestimmten Zeitraum haben oder? Dabei kann diese ja auch mehrmals auftauchen.
Naja, mit dem Join machst du eine Referenz auf die selbe Tabelle. Du vergleichst sie mit sich selber, was ab und zu Vorteile bringt, welchen ich aber hier nicht sehe.
GrußIch bin keine Signatur! - Auch wenn`s so aussieht :) - Wirklich!
Über ein Danke freut sich jeder
-
Hallo,
ich suche die LETZE Note in einem bestimmten Zeitraum, und wenn an dem Tag mehrere Noten vorliegen, die SCHLECHTESTE von denen.
Gruß
-
Mit bissel testen müsste es so klappen

Code :1 2 3 4 5 6 7 8
SELECT schueler_id, MAX(datum) AS Datum, MAX(schulnote) AS Note FROM schulnoten Where Datum BETWEEN SUBDATE('2011-11-01',INTERVAL 14 DAY) AND '2011-11-01' GROUP BY schueler_id
Hatte mir eine Testtabelle gemacht. Kann also sein, das du die Bezeichnungen anpassen musstIch bin keine Signatur! - Auch wenn`s so aussieht :) - Wirklich!
Über ein Danke freut sich jeder
-
Hi Kalito,
dein Statement gibt mir das letzte Datum und die schlechteste Schulnote. Unter Umständen kriege ich ne zusammengewürfelte Zeile. Ich brauche aber die Schulnote am letzten Schultag und für den Fall, dass am letzten Schultag mehrere Schulnoten vorliegen, die schlechteste von denen.
Beispiel
1; 2011-10-21; 1
1; 2011-10-22; 3
1; 2011-10-22; 5
1; 2011-10-24; 4
1; 2011-10-25; 6
1; 2011-10-28; 2
1; 2011-10-28; 4
So wäre das gesuchte Ergebnis die letzte Zeile. Dein Statement würde mir die vorvorletzte Zeile und die letzte Zeile zusammenschmeißen.
Gruß
-
Der JOIN den du bereits hast ist mMn die beste Lösung.
ggf. Kann man das mit dem 'da mehrere Zeiträume miteinander verrechnet werden müssen' noch etwas verbessern wenn ich da mehr drüber wüsste wie das gemeint ist.---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Hi Yaslaw,
ich habe mich für folgende Variante entschieden:
Code sql:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
... x1 INNER JOIN (SELECT schueler_id, note, MAX(datum) AS maxdatum FROM schulnoten WHERE datum BETWEEN (DATE ( '2011-11-01' ) - INTERVAL '2 weeks') AND '2011-11-01' GROUP BY schueler_id, note ORDER BY note DESC LIMIT 1) x2 ON x1.schueler_id = x2.schueler_id ...
Es werden halt mehrere Intervalle verrechnet und das wird n Monster Statement, wo man später einfach jede Übersicht verlieren wird.
Danke euch beiden!
GrußGeändert von sheel (15.01.12 um 11:38 Uhr) Grund: Codetags
Ähnliche Themen
-
Ausblenden von Spalten in einer SELECT-Abfrage trotz "SELECT *"
Von Greq im Forum Relationale DatenbanksystemeAntworten: 4Letzter Beitrag: 19.11.07, 23:29 -
select-box1 ändern -> select-box2 nimmt selben wert na
Von The_MACman im Forum Javascript & AjaxAntworten: 3Letzter Beitrag: 15.06.06, 00:34 -
Select Inhalt und Sichtbarkeit abhängig von vorhergehendem Select
Von LongDonJohn im Forum Javascript & AjaxAntworten: 4Letzter Beitrag: 07.04.06, 12:01 -
Nach select neues select per mysql eingrenzen
Von CrushLog im Forum PHPAntworten: 8Letzter Beitrag: 18.05.05, 15:43 -
neues Select nach select aus mysql
Von mrbong im Forum PHPAntworten: 15Letzter Beitrag: 14.10.04, 00:05





Zitieren

Login





