SQL Server 2008 : how to select sum of all sessions where difference between two consecutive sessions is less than 10 minutes

标签 sql sql-server sql-server-2008

我有一个表,用于存储用户的聊天消息。每条消息都记录在此表中。我必须计算特定用户的聊天持续时间。

因为有可能用户在 x 次聊天,但在 x+10 次后他离开聊天。 X+20 时间后,用户再次开始聊天。因此 x+10 和 x+20 之间的时间段不应被计算在内。

表结构和示例数据如图所示。不同的颜色代表同一用户的两个聊天 session 。我们可以看到,663 和 662 之间存在超过 1 小时的差异,因此此类 session 应从结果集中排除。最终结果应为 2.33 分钟。

enter image description here

declare @messagetime1 as datetime
declare @messagetime2 as datetime
select @messagetime1=messagetime from tbl_chatMessages where ID=662
select @messagetime2=messagetime from tbl_chatMessages where ID=659
print datediff(second,@messagetime2,@messagetime1)
   Result --- 97 seconds

declare @messagetime3 as datetime
declare @messagetime4 as datetime
select @messagetime3=messagetime from tbl_chatMessages where ID=668
select @messagetime4=messagetime from tbl_chatMessages where ID=663
print datediff(second,@messagetime4,@messagetime3)
   Result -- 43 seconds

请提出一个计算聊天持续时间的解决方案。这是我能想到的逻辑之一,以防你们中有人有更好的想法。请分享解决方案

最佳答案

首先需要计算相邻消息之间的间隙,如果间隙超过600秒,那么这些消息之间的时间为0

SELECT SUM(o.duration) / 60.00 AS duration
FROM dbo.tbl_chatMessages t1
  OUTER APPLY (
               SELECT TOP 1 
                 CASE WHEN DATEDIFF(second, t2.messageTime, t1.messageTime) > 600
                      THEN 0 
                      ELSE DATEDIFF(second, t2.messageTime, t1.messageTime) END
               FROM dbo.tbl_chatMessages t2
               WHERE t1.messageTime > t2.messageTime
               ORDER BY t2.messageTime DESC
               ) o(duration)

请参阅 SQLFiddle 上的演示

关于SQL Server 2008 : how to select sum of all sessions where difference between two consecutive sessions is less than 10 minutes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18046591/

相关文章:

mysql - 如何在mysql中获取首字母大写小写的数据?

sql-server - SQL 从第一个表中选择行并更新到第二个表

sql-server - 将 SQL Server Express 数据库复制到另一台计算机

sql - 连接两个查询/分割查询

mysql - 根据另一个表中的记录更新 SQL 记录

sql - Oracle SQL 按字符串聚合字段分组

c# - 用户控件连接到 SqlServer 数据库

sql-server - 在特定条件下使用 Sum

sql - 如何在 MSSQL 2008 字符串连接中替换表变量

php mysql 查询 fatal error