2016-09-15 87 views
1

附加是我的数据样本。在我的数据中,我有两个客户端ID。这意味着他们有一个主要和次要支付来源ID(保险)。主要保险由较低的优先数量决定。我想要做的是仅选择不同的客户端ID记录,并且只选择出现两次的主要付费源ID(并非全部都是)。下面是我试过的查询,但它没有奏效。如何通过在另一个字段中选择较小的值来选择两条记录中的一条

SELECT 
    CLIENT_ID, PAYSRC_ID, 
    MIN([PRIORITY]) AS PRI, 
    EFFECTIVE_DATE, EXPIRES_DATE 
FROM 
    CDCLINS 
WHERE 
    EXPIRES_DATE IS NULL 
GROUP BY 
    CLIENT_ID, PAYSRC_ID, EFFECTIVE_DATE, EXPIRES_DATE 
ORDER BY 
    CLIENT_ID 

Data_example

+1

“......但它没有工作。”对帮助解决问题的人没有帮助。 – dfundako

回答

3

我们可以用一个解析设置,按优先顺序排号,然后限制每个的client_ID(分区)的是第一排

WITH CTE AS (
SELECT 
    CLIENT_ID 
    , PAYSRC_ID 
    , PRIORITY 
    , EFFECTIVE_DATE 
    , EXPIRES_DATE 
    , row_number() over (partition by client_ID order by priority asc) rn 
FROM CDCLINS 
WHERE EXPIRES_DATE IS NULL 
) 
SELECT * 
FROM cte 
WHERE rn = 1 
ORDER BY CLIENT_ID 

你也可以这样做在子查询中也避免了CTE。

SELECT * 
FROM (
    SELECT 
     CLIENT_ID 
    , PAYSRC_ID 
    , PRIORITY 
    , EFFECTIVE_DATE 
    , EXPIRES_DATE 
    , row_number() over (partition by client_ID order by priority asc) rn 
    FROM CDCLINS 
    WHERE EXPIRES_DATE IS NULL) CTE 
WHERE rn = 1 
ORDER BY CLIENT_ID 

第三种办法是生成一组数据,仅由CLIENT_ID和最低的优先级,然后加入该数据集回到基地集允许内部联接将数据只是最小优先级为每个客户端。如果数据库不支持分析功能,这种方法是最常见的。

SELECT 
    A.CLIENT_ID 
    , PAYSRC_ID 
    , PRIORITY 
    , EFFECTIVE_DATE 
    , EXPIRES_DATE 
FROM CDCLINS A 
INNER JOIN (SELECT CLIENT_ID, MIN(Priority) mPri 
      FROM CDCLINS 
      GROUP BY Client_ID) B 
    on A.CLIENT_ID = B.Client_ID 
and A.Priority = B.mPri 
WHERE EXPIRES_DATE IS NULL 
0

常规查询:

DECLARE @T TABLE 
(
    CLIENT_ID INT, 
    PAYSRC_ID INT, 
    PRIORITY INT 
) 
INSERT @T SELECT 3156,3200,1 
INSERT @T SELECT 3156,9000,8 
INSERT @T SELECT 3157,9000,8 
INSERT [email protected] SELECT 3157,300,1 
INSERT @T SELECT 3159,3200,1 
INSERT @T SELECT 3154,9000,8 


SELECT 
    CLIENT_ID, 
    PAYSRC_ID 
FROM 
(
    SELECT 
     CLIENT_ID, 
     PAYSRC_ID, 
     ReverseRowNumber=ROW_NUMBER() OVER(PARTITION BY CLIENT_ID ORDER BY PRIORITY ASC) 
    FROM 
     @T 
) AS X 
WHERE 
    ReverseRowNumber=1 
相关问题