0

目标:确定客户的原始推荐 URL

我有一组成千上万的客户,每个客户都有多个会话。对于每个客户,我想找到第一个 sessionid,然后从那个 sessionid 中,我想在该会话中第一个查看的页面上找到推荐 URL。

我已经能够使用单个客户 ID 执行此操作,但不知道如何以编程方式为所有客户获取此信息。

下面是返回单个客户 ID 的正确数据的 SQL 查询。如何构建一个有两列(“ Customer_ID”和“ Original Referral URL”)的表?

SELECT 
    asciistr(HITS.REFERRER_URL), 
    HITS.REF_MARKER, 
    ACTS.REGISTRATION_DATE,  
    HITS.SESSION_ID, 
    hits.HIT_DATETIME    
FROM DB.CLICKSTRM_WMA_HITS hits
     INNER JOIN DB.D_Customers cus ON hits.customer_id = cus.customer_id
     INNER JOIN DB.ACCOUNTS ACTS ON CUS.ACCOUNT_ID = ACTS.ACCOUNT_ID     
WHERE HITS.IS_FIRST_VIEWED_PAGE = 1    
  AND CUS.ACCOUNT_ID = '999999999'  
GROUP BY HITS.HIT_DATETIME, ACTS.REGISTRATION_DATE, HITS.REF_MARKER, asciistr(hits.REFERRER_URL), HITS.SESSION_ID
ORDER BY HITS.HIT_DATETIME ASC
)WHERE ROWNUM < 2
4

1 回答 1

0

您可以使用排名/分析函数来做到这一点:

select *
from (SELECT asciistr(HITS.REFERRER_URL),HITS.REF_MARKER,      
             ACTS.REGISTRATION_DATE,HITS.SESSION_ID, hits.HIT_DATETIME,
             row_number() over (partition by cus.Account_Id
                                order by hits.sessionid, hits.IS_FIRST_VIEWED_PAGE desc
                               ) as seqnum
      from DB.CLICKSTRM_WMA_HITS hits INNER JOIN
           DB.D_Customers cus
           ON hits.customer_id = cus.customer_id INNER JOIN
           DB.ACCOUNTS ACTS
           ON CUS.ACCOUNT_ID = ACTS.ACCOUNT_ID
     ) t
where seqnum = 1

如果我正确地遵循了您的逻辑,我认为这是正确的。每个客户的最低会话,然后是 IS_FIRST_VIEW_PAGE 为 1 的会话。我假设其他页面的会话为 0。

于 2012-08-15T19:22:24.833 回答