我々は、優先順位によって順序付けられた行番号を設定し、各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は回避されます。第三のアプローチのみCLIENT_IDから成るデータの組と最も低い優先度を生成し、インナーだけにデータを制限するために参加できるようにバック基本セットに設定されたこのデータを結合することであろう
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
各クライアントの最小優先度。このアプローチは、データベースが分析関数をサポートしていない場合に最も一般的です。
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