jve*_*ema 9 sql t-sql sql-server
嘿伙计们,对不起,这是一个更长的问题......
我有一个包含以下列的表:
[ChatID] [用户] [LogID] [CreatedOn] [文字]
我需要找到的是给定用户ID与另一个特定用户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]
Run Code Online (Sandbox Code Playgroud)
...然后我需要看到Susan对John的平均响应时间为(20 + 6)/ 2 => 13秒,John对Susan的平均响应时间为(9/1)=> 9秒.
我甚至不确定这可以在基于集合的逻辑中完成,但如果有人有任何想法,他们将非常感激!
我没有PC来验证语法或任何东西,但我认为这应该给你一个起点:
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
Run Code Online (Sandbox Code Playgroud)
本质上,我们的想法是为数据添加行号,这样您就可以将一行连接到下一行(因此您有一个语句,后面跟着它的立即响应).加入行后,您可以获得两个条目之间经过的时间,然后按ChatID(我假设单独聊天之间的时间不相关)和两个用户对数据进行分组.就像我说的那样,这只是一个起点,因为我确信在我的查询中可能存在一些额外的标准和/或错误:)