2016-10-23 47 views
1

我的表結構如下:查找入口頁面,退出頁面和反彈 - SQL

Sessionid  Pageurl  timestamp 
    abc1   /testpage1 1465374987308 
    abc1   /testpage2 1465375020477 
    abc2   /testpage2 1465374987308 

我希望創建的條目頁數,退出頁數和反彈的報告每頁計數。

對於任何會話,第一頁是入口頁面,最後一頁是退出頁面。

當用戶觀看的第一頁(會話都有一個條目)

最終報告將如下..

pageurl  EntrypageCount  ExitPagecount  BounceCount 
/testpage1  1      0     0 
/testpage2  1      2     1 

我已經能夠得到反彈,但後離開時,發生反彈每天的基礎。 對於反彈,基本選擇是..

SELECT sessionid, min(timestamp),CASE WHEN count(*) = 1 THEN 1 ELSE 0 END AS bounces 
FROM auditdata GROUP BY sessionid. 

但無法弄清楚如何PAGEURL得到它們。

衷心感謝所有幫助。

由於

+0

可以顯示一些樣本數據和預期結果 –

+0

您使用的是什麼RDBMS? –

+0

我正在使用SQL服務器,但在雲上,所以不是所有的功能,但它可能會改變,所以會更喜歡基本的SQL代碼,可以運行在任何數據庫 – Arnab

回答

2

以下是單程(demo)。

SELECT Pageurl, 
     COUNT(CASE WHEN timestamp = First THEN 1 END) AS EntrypageCount, 
     COUNT(CASE WHEN timestamp = Last THEN 1 END) AS ExitPagecount, 
     COUNT(CASE WHEN Count = 1 THEN 1 END) AS BounceCount 
FROM (SELECT Pageurl, 
       timestamp, 
       MIN(timestamp) OVER (PARTITION BY Sessionid) AS First, 
       MAX(timestamp) OVER (PARTITION BY Sessionid) AS Last, 
       COUNT(*) OVER (PARTITION BY Sessionid)  AS Count 
     FROM auditdata) T 
GROUP BY Pageurl; 

上述使用窗口功能,其中最現代化的RDBMS的支持,沒有將是一個版本。

SELECT Pageurl, 
     COUNT(CASE WHEN timestamp = First THEN 1 END) AS EntrypageCount, 
     COUNT(CASE WHEN timestamp = Last THEN 1 END) AS ExitPagecount, 
     COUNT(CASE WHEN Count = 1 THEN 1 END) AS BounceCount 
FROM auditdata a 
     JOIN (SELECT Sessionid, 
        MIN(timestamp) AS First, 
        MAX(timestamp) AS Last, 
        COUNT(*)  AS Count 
      FROM auditdata 
      GROUP BY Sessionid) g 
     ON a.Sessionid = g.Sessionid 
GROUP BY Pageurl;