我怎么算不。使用sql(特别是teradata)访问会话中的页面(针对上述案例)?

时间:2015-12-29 06:48:42

标签: sql teradata

我有一个事件'表,其中包含该会话中的页面ID和事件编号作为列。我怎么能得到否。访问会话中的页面? 例如,考虑下面的数据没有。对p1的访问量应为2,对于p2,访问量应为1。

page_id event_number p1 1 p1 2 p1 3 p2 4 p2 5 p2 6 p1 7 p1 8 p1 9

4 个答案:

答案 0 :(得分:0)

将查询用作:

Select Page_Id, Count(event_number) as Visits Group by Page_ID

答案 1 :(得分:0)

SELECT a.*, 
       CASE 
         WHEN a.page_id <> b.page_id 
               OR b.page_id IS NULL THEN 1 
         ELSE 0 
       END                     AS ind, 
       Sum(ind) 
         OVER ( 
           partition BY a.page_id 
           ORDER BY a.seq_num) AS val 
FROM   testing_visits a 
       LEFT JOIN testing_visits b 
              ON a.seq_num + 1 = b.seq_num; 

致我朋友SreeRam Srinivasan的信用。

答案 2 :(得分:0)

这是否回答:

9*9

答案 3 :(得分:0)

这会将预期结果作为聚合返回:

SELECT page_id, COUNT(*)
FROM 
 (
   SELECT page_id, 
      CASE -- return 1 whenever there accessed page changes
         WHEN page_id = 
                MIN(page_id) 
                OVER (ORDER BY event_number
                      ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING)
         THEN 0 
         ELSE 1
      END AS flag
   FROM tab
   QUALIFY flag = 1 -- only return the 
 ) AS dt
GROUP BY 1

如果您想保留详细信息行,只需切换到SUM(flag) OVER (PARTITION BY page_id)而不是COUNT,然后移除QUALIFY