SQL: Maximale function verwenden und max pro Client zurückgeben, nicht insgesamt

Ich bin sehr neu bei der Verwendung von SQL und ich versuche, meine erste Abfrage / Bericht zu build, und ich hatte gehofft, dass ich etwas Hilfe dazu bekommen könnte (dies scheint der Ort zu sein!). Grundsätzlich, was ich erstellen möchte, ist ein Bericht, der zeigt, wann das letzte Mal ein Mitarbeiter oder Auftragnehmer bezahlt wurde. Wir haben eine database mit all diesen Informationen, ich möchte nur eine eigene list aller Personen mit ihrem letzten Lohndatum zurückgeben. Was ich am Ende bekomme, ist entweder eine list aller Bezahlungen, die wir gemacht haben (Person1 ist auf der list 20+ mal mit jedem Lohndatum) oder eine list mit jeder Person und die aktuellste Bezahlung von jedermann, nicht nur diese Person. Hier ist was ich bisher habe

SELECT table1.Office , table1.EE_No , table1.Name , table1.Code , table1.Freq , ( SELECT DISTINCT MAX(table2.PayDate) FROM table2 ) AS Last_Paycheck FROM table1 INNER JOIN table2 ON table1.UniqueID = table2.UniqueID WHERE table1.EndDate IS NULL 

Was dies ist, ist eine list aller Mitarbeiter mit 8/30/2013 aufgeführt, was ist das letzte Mal, dass jemand bezahlt hat, aber nicht jeder. Was mache ich hier mit der Max-function? Ich habe viele verschiedene Weisen ausprobiert und kein Glück, hier muss etwas fehlen!

Du musst so etwas probieren

 Select table1.Office, table1.EE_No, table1.Name, table1.Code, table1.Freq, (Select distinct MAX (table2.PayDate) from table2 where table1.UniqueID = table2.UniqueID ) as Last_Paycheck from table1 on where table1.EndDate is null 

Der andere path wäre so etwas wie

 Select table1.Office, table1.EE_No, table1.Name, table1.Code, table1.Freq, MAX (table2.PayDate) as Last_Paycheck from table1 inner join table2 on table1.UniqueID = table2.UniqueID where table1.EndDate is null GROUP BY table1.Office, table1.EE_No, table1.Name, table1.Code, table1.Freq 

Beachten Sie auch, wie die Kommentar-Staaten, verwenden Sie mehr beschreibende Tabellennamen, da dies erheblich verbessern Maitainability später.

Versuchen Sie, diese Zeile zu ändern:

 (Select distinct MAX (table2.PayDate) from table2) as Last_Paycheck 

So etwas wie dieses:

 MAX (table2.PayDate) OVER (PARTITON BY table2.UniqueID) as Last_Paycheck 

Ohne Select erforderlich – Sie haben bereits die in Ihrer Join-Klausel benötigte Assoziation angegeben.

Hoffe das macht den Trick …

Gruppierung verwenden:

 Select table1.Office, table1.EE_No, table1.Name, table1.Code, table1.Freq, MAX (table2.PayDate) as Last_Paycheck from table1 inner join table2 on table1.UniqueID = table2.UniqueID where table1.EndDate is null group by table1.Office, table1.EE_No, table1.Name, table1.Code, table1.Freq