Jost: Problem mit Tabelle

Hallo ich versuche eine sql-Abfrage für eine Prüfung zu erstellen...
der Datensatz zu dem ich mich hingearbeitet habe sieht folgendermaßen aus:
pid,name,versuche,pruefungID,Mod_modulID,datum,note
20000,'Sam K',1,1,'Mathe2','2009-07-10 00:00:00.000',1.000000
20001,'Tim S',2,1,'Mathe2','2009-07-10 00:00:00.000',5.000000
20001,'Tim S',2,3,'Mathe2','2009-09-12 00:00:00.000',1.000000
20003,'Thorsten G',2,1,'Mathe2','2009-07-10 00:00:00.000',5.000000
20003,'Thorsten G',2,3,'Mathe2','2009-09-12 00:00:00.000',3.700000
20003,'Thorsten G',2,11,'Mathe2','2009-08-25 07:55:37.000',
20004,'Adam Student',1,1,'Mathe2','2009-07-10 00:00:00.000',2.000000
20004,'Adam Student',1,3,'Mathe2','2009-09-12 00:00:00.000',4.000000
20005,'Adam Student',1,1,'Mathe2','2009-07-10 00:00:00.000',5.000000

Ich habe nun das Problem das ich für die ich nur die Studenten angezeigt bekommen möchte die diese Prüfung noch nicht bestanden haben(note besser als 5). Ich kriege es leider nur hin indem ich nach note=5 abfrage. Leider tauchen dann Studenten auf die zwar eine 5 geschrieben haben, aber im 2.Versuch dann eine bessere Note z.B. 3,7 erreicht haben. Somit sollte dieser Datensatz entfallen mir fällt nur keine Möglichkeit ein es so hinzukriegen.

Die sql-abfrage sieht bis jetzt so aus:

select a.pid, a.name, a.versuche, pr.pruefungID, pr.Mod_modulID, pr.datum, min(n.note) as note
from Pruefung as pr
join Note as n
on pr.pruefungID = n.pruefungID
join Ansicht as a
on a.pid = n.pid

where pr.Mod_modulID ='Mathe2'
//and n.note=5

group by a.pid, a.name, a.versuche,pr.pruefungID,pr.Mod_modulID,pr.datum

Hoffe aud eure Hilfe vielen Dank im Vorraus

  1. Moin

    Ein Sub-Select in Verbindung mit NOT EXISTS sollte dir helfen.

    In der Art:

    select from tabelle1 a WHERE note=5 AND NOT EXISTS (SELECT from tabelle1 b WHERE b.note<5 AND b.name=a.name)

    So in der Art.

    Gruß Bobby

    --
    -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
    ### Henry L. Mencken ###
    -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
    ## Viktor Frankl ###
    ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
  2. Hi Jost.

    Ich habe nun das Problem das ich für die ich nur die Studenten angezeigt bekommen möchte die diese Prüfung noch nicht bestanden haben(note besser als 5). Ich kriege es leider nur hin indem ich nach note=5 abfrage. Leider tauchen dann Studenten auf die zwar eine 5 geschrieben haben, aber im 2.Versuch dann eine bessere Note z.B. 3,7 erreicht haben.

    Du brauchst fuer Deine Ergebnismenge Informationen aller Datensaetze fuer die entsprechende Pruefung, willst aber nur eine Liste der Studenten (die jeweils ggf. mehrere Datensaetze haben). Also solltest Du die Datensaetze nach den Studenten, sprich, der Spalte 'name' gruppieren. Die Eigenschaft, die einen Studenten fuer das Auftauchen in Deiner Ergebnismenge qualifiziert, ist dann:

    "Alle Noten des Studenten sind mindestens(?) 5.", bzw. etwas SQL-naeher:

    "Das Minimum aller Noten des Studenten ist mindestens 5."

    Die SQL-Uebersetzung davon bildet dann Deine HAVING-Klausel.

    Und noch zwei Fragen aus Interesse zu Deinem Datenbank-Design:

    1.: In einer Zeile steht eine Anzahl von Versuchen fuer die Pruefung (mitunter > 1) und auch ein Datum und eine Note. Hat das irgendeinen Sinn?

    2.: Was sind pid und pruefungID? Wie eine Pruefung in Deiner Datenbank charaktrisiert ist, vertehe ich bisher nicht im geringsten.

    Viele Gruesse,
    der Bademeister