我們可以用一個解析設置,按優先順序排號,然後限制每個的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