我在SQL Server中有三个链接表(客户,策略和声明),并且需要获取每个客户的记录,以显示他们的最新策略,并在该策略中显示他们的最新声明。客户的最高PolicyID是其最新的保单,最高的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
试试这个,
;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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句