我有一个供应商应用程序,它将会话数据存储在 SQL Server 2008 数据库表中。它包含的列包括 sessionId、用户的 IP 地址、会话创建时的日期时间戳(即用户登录)以及会话销毁时的日期时间戳(即用户注销或系统注销用户) .
我的目标是分析该表中的所有记录,并找出所有记录中并发会话的平均数。
现在,不幸的是,由于本问题范围之外的原因,会话销毁日期不准确。因此,我对会话的持续时间使用了一个非常粗略的估计:1 小时。在我整理了设计阶段之后,我可以随时更改数字。
我确信我可以组合一个存储过程来获得平均并发会话数,但我希望我可以通过查询来完成它。
为了简化这里的事情,让我们假设表中有 5 条记录,并且所有记录都是在同一天创建的,并且是 GMT 时间:
sessionId sessionStart sessionEnd Accumulative # of Concurrent Sessions
1 12:00 13:00 1
2 12:15 13:15 2
3 12:30 13:30 3
4 12:45 13:45 4
5 13:00 14:00 4
Run Code Online (Sandbox Code Playgroud)
13:00,第一个会话被销毁。并发会话数保持在 4,因为会话 2 到 5 仍然存在。
问题是我如何编写一个查询来输出平均并发会话数?可以做到吗?我想它会涉及同一张桌子上的多个连接,但我还没有完全弄清楚从哪里开始。
该表有不到一百万条记录。我可以使用 2012 年的盒子,如果有帮助,可以将表格复制到那里。