嘿,对不起,这是一个更长的问题…
我有一个表格与以下列:
[ChatID] [User] [LogID] [CreatedOn] [Text]
我需要找到的是给定用户ID到另一个特定用户标识的平均响应时间.所以,如果我的数据看起来像:
[1] [john] [20] [1/1/11 3:00:00] [Hello] [1] [john] [21] [1/1/11 3:00:23] [Anyone there?] [1] [susan] [22] [1/1/11 3:00:43] [Hello!] [1] [susan] [23] [1/1/11 3:00:53] [What's up?] [1] [john] [24] [1/1/11 3:01:02] [Not much] [1] [susan] [25] [1/1/11 3:01:08] [Cool]
那么我需要看到苏珊的平均响应时间是(20 6)/ 2 =>约翰约13秒,约翰平均为(9/1)=> 9秒到苏珊.
我甚至不确定这可以在基于集合的逻辑中完成,但如果有任何想法,他们将非常感激!
解决方法
我没有电脑验证语法或任何东西,但我认为这应该给你一个起点:
WITH ChatWithRownum AS ( SELECT ChatID,User,LogID,CreatedOn,ROW_NUMBER() OVER(ORDER BY ChatID,CreatedOn) AS rownum FROM ChatLog ) SELECT First.ChatID,Second.User,AVG(DATEDIFF(seconds,First.CreatedOn,Second.CreatedOn)) AS AvgElapsedTime FROM ChatWithRownum First JOIN ChatWithRownum Second ON First.ChatID = Second.ChatID AND First.rownum = Second.rownum - 1 WHERE First.User != Second.User GROUP BY First.ChatID,Second.User
基本上,这个想法是将数字添加到数据中,以便您可以将一行连接到下一行(因此您有一个语句,然后是其即时响应).一旦你加入了这些行,你可以获得两个条目之间的时间,然后通过ChatID(我假定不同的聊天之间的时间不相关)和两个用户对数据进行分组.像我说的,这只是一个起始的地方,因为我确信在我的查询中可能会有一些额外的标准和/或错误:)