查找进入页面、退出页面和反弹-sql

查找进入页面、退出页面和反弹-sql,sql,sql-server,azure-sql-database,Sql,Sql Server,Azure Sql Database,我的表格结构如下: Sessionid Pageurl timestamp abc1 /testpage1 1465374987308 abc1 /testpage2 1465375020477 abc2 /testpage2 1465374987308 我希望创建一个每页的进入页面计数、退出页面计数和反弹计数的报告 对于任何会话,第一页是进入页,最后一页是退出页 用户在查看第一页

我的表格结构如下:

 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找到它们

衷心感谢您的帮助

谢谢

以下是一种方法()

上面使用了大多数现代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;

您能展示一些示例数据和预期结果吗?您使用的是什么RDBMS?我使用的是sql server,但在云上,因此并非所有功能都会改变,但它可能会改变,因此我更喜欢可以在任何数据库上运行的基本sql代码
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;