全て、
祖父母テーブルで 2 つ以上のレコードをペアにして、1 つの孫を使用してその孫レコードを検索できるようにしようとしています。
構造はこんな感じ
- S_ASSET ×1レコード
- S_ASSET_X x 2 子レコード
- CX_ASSET_XM x 1 孫レコード
したがって、カーディナリティは 1 です。祖父母は 2 つの孫レコードを持つことができます。
この CX_ASSET_XM テーブルには、孫資産の TCP/IP 呼び出しに関する情報が保持されます。これらの呼び出しは同期されません。したがって、1 つの孫資産が今日呼び出しを行う可能性がありますが、もう 1 つの孫資産は昨日から呼び出しを行っていません。
私のクエリでは、今日作成されたすべての孫のレコード (sysdate) を見つけてから、リレーションシップを上に移動して祖父母を見つけ、下に戻って孫のタプルで他の双子を見つけます。
私のクエリの問題は、ペアが行ったすべての TCP/IP 呼び出しを返すことですが、各孫の最新のコールバックのみを分析したいということです
ここにイラストがあります
したがって、結果セットを最小限に抑えるために、ROW_NUM関数を使用して、必要な結果のみを取得しようとしています。これは、各孫レコードの最新のコールバック日です。
クエリ
SELECT cb.ssid, cb.created_by, cb.callback_date, cb.callback_num,
asset.desc_text, asset.prom_integ_id, asset.integration_id
--Traversing Up to find the Grandparent record of
FROM SIEBEL.CX_ASSET_XM cb
JOIN SIEBEL.S_ASSET_X assetx ON cb.SSID = assetx.attrib_37
JOIN SIEBEL.S_ASSET asset ON assetx.par_row_id = asset.row_id
WHERE asset.prom_integ_id IN
--Traversing Down to find the other pair
( SELECT asset.prom_integ_id,
ROW_NUMBER() OVER (PARTITION BY cb.ssid
ORDER BY cb.callback_date DESC)
FROM SIEBEL.CX_ASSET_XM cb
JOIN SIEBEL.S_ASSET_X assetx ON cb.ssid = assetx.attrib_37
JOIN SIEBEL.S_ASSET asset ON assetx.par_row_id = asset.row_id
);
エラー
ORA-00913: too many values
00913. 00000 - "too many values"
*Cause:
*Action:
Error at Line: 7 Column: 36
このクエリ構造で ROW_NUM と PARTITION を正しく使用していますか?
ありがとう
ORACLE DB のバージョンは10g Enterprise Edition Release 10.2.0.3.0 - 64 ビットです。