全部,
我试图将一个或多个祖父母表中的两个或多个记录配对,以便可以使用一个孙子项开始查找其子项记录。
所以结构就像
因此基数是一个祖父母可以拥有2个孙记录
此CX_ASSET_XM表将保存有关孙资产的TCP / IP调用的信息。这些呼叫不同步。因此,一个孙资产可以在今天拨打电话,但另一资产从昨天开始就没有拨打过。
在我的查询中,我找到了今天(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企业版10.2.0.3.0-64位
问题是,您使用IN运算符,在这种情况下,该运算符希望可以使用一组值,但是子查询返回两列,而不是一列:
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)
应该:
WHERE asset.prom_integ_id IN
--Traversing Down to find the other pair
( SELECT asset.prom_integ_id
而且,从那开始,我想应该更早地访问从ROW_NUMBER返回的值,因此它看起来像这样:
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 prom_integ_id
FROM (
SELECT asset.prom_integ_id, ROW_NUMBER() OVER (PARTITION BY cb.ssid ORDER BY cb.callback_date DESC) row_n
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 row_n = 1
);
我不确定这是否是您想要的-您可以检查吗?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句