Tabellen werden basierend auf dem Maximalwert verknüpft

8

Hier ist ein vereinfachtes Beispiel für das, worüber ich rede:

%Vor%

Nehmen wir an, dass jeder Schüler für diese Frage mindestens ein Prüfungsergebnis erfasst hat.

Wie würden Sie jeden Schüler mit seiner höchsten Punktzahl auswählen? Bearbeiten : ... UND die anderen Felder in diesem Datensatz?

Erwartete Ausgabe:

%Vor%

Antworten mit allen Arten von DBMS sind willkommen.

    
nickf 07.12.2009, 23:22
quelle

6 Antworten

10

Beantworten der EDITED-Frage (d. h. um auch verknüpfte Spalten zu erhalten).

In Sql Server 2005+ wäre der beste Ansatz die Verwendung einer Ranking- / Fensterfunktion in Verbindung mit einem CTE , wie folgt:

%Vor%

Für eine ANSI-SQL-kompatible Lösung funktionieren eine Unterabfrage und ein Self-Join wie folgt:

%Vor%

Dieser letzte geht davon aus, dass es keine duplicate student_id / max_score-Kombinationen gibt. Wenn es solche Duplikate gibt und / oder du sie entdoppeln möchtest, musst du eine andere Unterabfrage verwenden, um mit etwas Deterministischem zu entscheiden aufnehmen, um zu ziehen. Angenommen, Sie können nicht mehrere Datensätze für einen bestimmten Schüler mit demselben Datum haben, wenn Sie einen Gleichstand auf der Basis der letzten max_score brechen wollten, würden Sie etwa Folgendes tun:

%Vor%

BEARBEITEN: Eine passende Deduplizierungs-Abfrage wurde hinzugefügt, dank Marks gutem Fang in Kommentaren

    
chadhoc 07.12.2009, 23:44
quelle
3
%Vor%     
OMG Ponies 07.12.2009 23:25
quelle
2

Probieren Sie das aus,

%Vor%     
Zinx 07.12.2009 23:32
quelle
2

Mit den analytischen Funktionen von Oracle ist das einfach:

%Vor%     
Jeffrey Kemp 08.12.2009 05:08
quelle
0

Verwenden von MS SQL Server:

%Vor%

Wenn eine Punktzahl vorhanden ist, wird das älteste Datum zurückgegeben (ändern Sie date ASC in date DESC , um stattdessen die neueste Zahl zurückzugeben).

Ausgabe:

%Vor%

Testbett:

%Vor%

Auf MySQL glaube ich, dass Sie die TOP (1) am Ende der Anweisung in ein LIMIT 1 ändern können. Ich habe das aber noch nicht getestet.

    
Mark Byers 08.12.2009 00:10
quelle
0
%Vor%     
MSH 08.12.2009 05:09
quelle

Tags und Links