一张mysql聊天记录表,如何分析出10分钟内哪个角色私聊了5个人以上
发布于 6 年前 作者 heguangda 3644 次浏览 来自 问答

如题,聊天数据表的结构大概为 【自增id, 角色ID , 时间, 对象ID, 聊天内容】,怎么找出10分钟内私聊了5个人以上的角色呀??或者node.js有没有类似做数据分析的包

6 回复

如果是指定某个10分钟范围,说个可能性能一般的语句。。 select fuid, count(*) as count from (select fuid, tuid from 聊天数据表 group by fuid, tuid 时间范围语句你自己搞定) tmp group by fuid having count >= 5


如果是哪个10分钟都行的话。。。

“十分钟内” 这个条件,貌似SQL比较难搞。。

这个问题一下子想着查所有满足条件的用户感觉比较困难,可以考虑先算出某一个用户10分钟内私聊了5个人以上就比较简单了,如果满足条件就把数据存到中间表,去重。但是用户量很大的话这种方法可能就不好用了,可能需要专业的数据分析工具了。

定义一个表,代表一条聊天记录之后的十分钟之内有另一条聊天记录的,然后再按聊天记录聚合,如果有5条以上就是有一个以当前聊天时间为起点十分钟之内的。。。表达不出来了大概的代码是这样的,应该是对的

user u1 inner join user u2 on datediff(mi, u1.time, u2.time) < 10 and u1.id <> u2.id and u1.user_id = u2.user_id group by u1.id having count(u2.id) > 5

时间/(10*60*1000)后,两种情况 1、对值取整,group by 时间,判断在10分钟单位内,统计和多少角色聊天, 2、对值进行四舍五入后,group by 时间,10分钟单位时间内,和多少角色聊天, 可能有疏漏

来自酷炫的 CNodeMD

循环每条记录 看看 这条记录+5分钟内 同一个人的聊天人数

回到顶部