2016-07-18 3 views
2

Ich verfüge über drei verknüpfte Tabellen in SQL Server (Kunden, Richtlinien und Ansprüche) und muss für jeden Kunden eine Aufzeichnung erstellen, die die neueste Richtlinie und innerhalb dieser Richtlinie am häufigsten anzeigt letzter Anspruch Die höchste Richtlinien-ID für den Kunden ist die neueste Richtlinie, und die höchste Anspruchs-ID ist der neueste Anspruch für die Richtlinie.Zeilen mit höchsten Werten aus der zweiten und dritten Tabelle

Ich habe die folgende Abfrage, um alle Richtlinien/Ansprüche anzuzeigen, aber wie schränke ich sie auf die neuesten/höchsten IDs ein?

SELECT C.CustomerID, C.FirstName, C.LastName, P.PolicyID, P.PolicyDate, P.PolicyType, CL.ClaimID, CL.ClaimDate, CL.ClaimDescription 
FROM Customers C INNER JOIN Policies P ON C.CustomerID = P.CustomerID 
INNER JOIN Claims CL ON P.PolicyID = CL.PolicyID 

Antwort

1

versuchen dies,

;WITH CTE AS 
(
    SELECT C.CustomerID, C.FirstName, C.LastName, P.PolicyID, P.PolicyDate, P.PolicyType, CL.ClaimID, CL.ClaimDate, CL.ClaimDescription 
     ,ROW_NUMBER() OVER(PARTITION BY C.CustomerID ORDER BY P.PolicyID DESC) PolicyOrder 
     ,ROW_NUMBER() OVER(PARTITION BY C.CustomerID, P.PolicyID ORDER BY CL.ClaimID DESC) ClaimOrder 
    FROM Customers C INNER JOIN Policies P ON C.CustomerID = P.CustomerID 
    INNER JOIN Claims CL ON P.PolicyID = CL.PolicyID 
) 
SELECT 
    * 
FROM CTE c 
WHERE c.PolicyOrder = 1 
    AND c.ClaimOrder = 1 
+1

-Meister! Arbeitete perfekt - danke. Ich würde eine nützliche Antwort wählen, wenn ich genug von einem Ruf hatte. – Jim400

Verwandte Themen