2016-03-29 8 views
-1

Ich arbeite an einem Bericht in SQL Server, aber scheint nicht richtig zu machen. Wie kann ich das neueste JNJobID-JNNote zurückgeben, das meiner Job-Tabelle hinzugefügt wurde?Wählen Sie die letzte eindeutige

Select 
    JobNotesID 
    ,JNJobID 
    ,JNDate  
    ,JNNote 
From [JobNotes] Left JOIN Jobs ON [JobNotes].JNJobID = Jobs.JobID 

Jobs Tabelle

JobID ProjectNum  
6972 PN1 
6973 PN2 
6974 PN3 

JobNotes Tabelle

JobNotesID JNJobID JNDate      JNNote  
11800  6972 2016-03-15 00:00:00.000  Example 1 
11874  6972 2016-03-17 00:00:00.000  Example 2 
12181  6972 2016-03-25 00:00:00.000  Example 3 
12006  6973 2016-03-21 00:00:00.000  Example 4 
11961  6974 2016-03-18 00:00:00.000  Example 5 
11924  6974 2016-03-17 00:00:00.000  Example 6 

Würde wieder

JobID ProjectNum   JNNote 
6972  PN1    Example 3 
6973  PN2    Example 4 
6974  PN3    Example 6 
+0

Dies ist eine sehr häufige Frage und es gibt viele passende Duplikate, die als [tag: greatest-n-per-group] gekennzeichnet sind, aber die, die ich als dupliziertes Ziel auswähle, hat die Lösung und sollte zu dir passen. – jpw

+0

Danke. Ich bin immer noch auf der Suche nach einer Lösung, wie Sie die Ergebnisse der größten n-pro-Gruppe einer anderen Abfrage basierend auf der JNJobID zuordnen können, um sie mit der Job-Tabelle mit JobID zu verknüpfen. –

+0

Sieh dir das an: http://www.sqlfiddle.com/#!6/af00e/1 – jpw

Antwort

-1

Sie eine die analytische Version o verwenden könnte f max(), um zu erkennen, welche Zeile für jede ID die neueste ist. Das erfordert eine CTE- oder Inline-Ansicht:

select 
    n.JNNote 
from (
    select *, max(JNDate) over (partition by JNJobID) as maxDate 
    from JobNotes 
) n 
where n.JNDate = n.maxDate 

Das bedeutet, dass es nie zwei Notizen für denselben Job am selben Datum gibt.