我们可以用一个解析设置,按优先顺序排号,然后限制每个的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
“......但它没有工作。”对帮助解决问题的人没有帮助。 – dfundako