在雪花中使用子字符串的 SQL 连接

时间:2021-01-27 14:51:43

标签: sql join snowflake-cloud-data-platform

我正在尝试运行此查询,但它花费了太长时间,因为要加入我的调用区域表并创建多个记录。例如,如果我的终止号码是“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

0 个答案:

没有答案