加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 08:55:16 所属栏目:MsSql教程 来源:网络整理
导读:嘿,对不起,这是一个更长的问题… 我有一个表格与以下列: [ChatID] [User] [LogID] [CreatedOn] [Text] 我需要找到的是给定用户ID到另一个特定用户标识的平均响应时间.所以,如果我的数据看起来像: [1] [john] [20] [1/1/11 3:00:00] [Hello][1] [john] [21]
嘿,对不起,这是一个更长的问题…

我有一个表格与以下列:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读