2017-07-15 3 views
0

Ich habe unten TabellendatenFilter Datensätze mehrere Gruppierungen mit und Spalten erhalten

enter image description here

Wie Sie für einen bestimmten Schüler sehen können, gibt es mehrere Datensätze in einem Jahr und mehrere Schulen. das Ergebnis, das ich nehmen muß, ist Filter Student nach unten Kriterien

  • wenn der Student mehr Schulen im selben Jahr nimmt die Aufzeichnungen hat, das neueste Anmeldedatum
  • Wenn der Student nur einen Datensatz für ein Jahr hat , nehmen Sie den neuesten Anmeldungsdatensatz

Schließlich hätte ich nur einen Datensatz pro Schüler. So nach, dass ich nur Daten wie unten hervorgehoben,

enter image description here

Ich habe viele Gruppierungen versucht, dies zu erhalten und das Problem ist, wird es einige Spalten weglassen. Aber ich muss alle hier aufgeführten Spalten nehmen.

select max(val.sc_year) as lyear, max(val.enroll_date) as ldate,val.stident_id,val.student_name,val.school 
from table val group by val.stident_id,val.student_name,val.school 
+0

Gibt die Abfrage einen Fehler? – jophab

+1

Sie müssen sich entscheiden. In Wörtern sagen Sie, dass Sie die letzte Zeile für jeden Schüler ** und Jahr ** erhalten möchten, aber später (und im Beispiel) wählen Sie nur eine Zeile pro Schüler aus. Du scheinst dich überhaupt nicht um das Jahr zu kümmern. Also was ist es? – mathguy

+0

unterschiedliche Studenten sollten basierend auf dem letzten Registrierungsdatum nehmen. –

Antwort

1

Sie wollen das Beste bekommen letzte Zeile für jeden Schüler und jedes Jahr. unter Abfrage wird Ihnen helfen.

SELECT * FROM 
(
    SELECT StusdentId, EnrolmentDate, Row_Number() OVER(PARTITION BY StusdentId ORDER By EnrolmentDate desc) 
     AS SRNo 
     FROM [StudentTable] 
) AS B WHERE SRNo=1 
0

So etwas wie die folgenden funktionieren sollte, zumindest wird es die gelben Zeilen zurück, so dass nur ein Datensatz pro Schüler unabhängig von der Anzahl der Jahre, die er untersucht:

select val.sc_year as lyear, val.enroll_date as ldate,val.stident_id,val.student_name,val.school 
from table val 
where 
    concat(val.enroll_date, val.student_id) in 
    (select concat(max(val.enroll_date), val.student_id) from val 
     group by val.student_id) 
Verwandte Themen