确定Oracle SQL中一组客户的第一个引用URL

时间:2012-08-15 19:09:35

标签: sql oracle

目标:确定客户的原始引荐网址

我有一组客户,每个人都有多个会话。对于每个客户,我想找到第一个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

1 个答案:

答案 0 :(得分: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。