2016-07-18 109 views
2

我在SQL Server(客户,策略和声明)中有三个链接表,并且需要为每个显示其最近策略的客户记录一条记录,并且在该策略中,最近的索赔。客户的最高政策ID是其最新政策,最高ClaimID是政策的最新声明。来自第二个和第三个表的最高值的行

我有以下查询来显示所有政策/索赔,但我如何限制他们到最新/最高的ID?

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 

回答

1

试试这个,

;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

冠军!工作完美 - 谢谢。如果我有足够的声誉,我会投票有用的答案。 – Jim400

相关问题