如何平均TSQL中特定值之间的差异?

前端之家收集整理的这篇文章主要介绍了如何平均TSQL中特定值之间的差异?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
嘿,对不起,这是一个更长的问题…

我有一个表格与以下列:

[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(我假定不同的聊天之间的时间不相关)和两个用户对数据进行分组.像我说的,这只是一个起始的地方,因为我确信在我的查询中可能会有一些额外的标准和/或错误:)

猜你在找的MsSQL相关文章