我正在尝试运行此查询,但它花费了太长时间,因为要加入我的调用区域表并创建多个记录。例如,如果我的终止号码是“9974552425”,那么我将得到与呼叫区域“99”、“997”、“9974”、“99745”匹配的 4 个重复记录的输出。
需要输出:我只想获得我的终止号码的最大长度与呼叫区区号匹配的唯一匹配项,并相应地替换此连接(“ON”)语句。因为我的查询花费了最长时间运行此连接。也许如果 regex_substring 或其他东西可以加快查询性能。
如果您能帮助解决此问题,我将不胜感激。
SELECT
a.gsmcallreferencenumber
, a.CONNECT_DATETIME
, a.TOTAL_CALL_DURATION_SEC
, a.ORIGINATING_NUMBER
, a.TERMINATING_NUMBER
, cz.ZONE_AREA_CODE_PRICE
, cz.ZONE_AREA_CODE_PRICE_CURRENCY
, cz.ZONE_AREA_CODE
, cz.ZONE_DESTINATION
, ROUND(nvl(1.0 * (a.TOTAL_CALL_DURATION_SEC / 60) * cz.ZONE_AREA_CODE_PRICE, 0), 2) AS CALL_COST
FROM
tablex a
LEFT JOIN CALLING_ZONES cz
ON SUBSTR(A.TERMINATING_NUMBER, 1,length(cz.ZONE_AREA_CODE) ) = cz.ZONE_AREA_CODE
GROUP BY
a.CONNECT_DATETIME
, a.TOTAL_CALL_DURATION_SEC
, a.ORIGINATING_NUMBER
, a.TERMINATING_NUMBER
, cz.ZONE_AREA_CODE_PRICE
, cz.ZONE_AREA_CODE_PRICE_CURRENCY
, cz.ZONE_AREA_CODE
, cz.ZONE_DESTINATION;
样本数据
Table a Table Calling Zone
a.Terminating number zone_area_code
9974552425 5324
99526552425 995
5324664892 9952
3274639201 99526
6473294465 997
9974
提及查询的当前输出
输出
Terminating_Number Zone area code
9974552425 997
9974552425 9974
99526552425 995
99526552425 9952
99526552425 99526
5324664892 5324
3274639201 null
6473294465 null
期望的输出:
9974552425 9974
99526552425 99526
5324664892 5324
3274639201 null
6473294465 null