sql-server - 帮助通过 SQL 查询识别论坛垃圾邮件发送者?

标签 sql-server tsql

我想要一个简单的查询,我可以对数据库运行该查询,以返回用户发布到我们论坛的时间阈值中的异常情况。如果我有以下数据库结构:

ThreadId | UserId | PostAuthor | PostDate |
1          1000     Spammer      2010-11-14 02:52:50.093
2          1000     Spammer      2010-11-14 02:53:06.893
3          1000     Spammer      2010-11-14 02:53:22.130
4          1000     Spammer      2010-11-14 02:53:37.073
5          2000     RealUser     2010-11-14 02:53:52.383
6          1000     Spammer      2010-11-14 02:54:07.430 

我想设置一个阈值,例如,如果来自同一用户的 3 个帖子在 1 分钟内出现,则发帖者可能会在论坛上发送垃圾邮件。反过来,我想在查询中返回用户“垃圾邮件发送者”,以及在分配的时间内发布的帖子数量。

在上面的示例中,垃圾邮件发送者在 1 分钟内发布了 4 条消息,因此查询结果可能如下所示:

UserId | PostAuthor | PostCount | DateStart               | DateEnd
1000     Spammer      4           2010-11-14 02:52:50.093   2010-11-14 02:53:37.073

欢迎对返回数据的格式提出任何建议。对我来说,格式并不重要,重要的是正确识别论坛滥用者。

最佳答案

输出中没有您想要的所有内容,但这是一个开始:

(改写:给我所有其后存在 2 个或更多其他帖子的帖子,但在一分钟内)

Select 
  Spammer = PostAuthor,
  NumberOfPosts = (Select Count(*) 
                   From Posts As AllPosts 
                   Where AllPosts.UserID = Posts.UserID)
From Posts
Where 2 <= (Select Count(*)
            From Posts As OtherPosts
            Where OtherPosts.UserID = Posts.UserID
              And OtherPosts.PostDate > Posts.PostDate
              And OtherPosts.PostDate < DateAdd(Minute, 1, Posts.PostDate))

关于sql-server - 帮助通过 SQL 查询识别论坛垃圾邮件发送者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4187180/

相关文章:

sql - 如何在不知道列名的情况下获取列值? SQL服务器

sql-server - SQL Server 2008 R2 将列添加到特定位置

mysql - T-SQL 分组/合并记录

sql-server - nHibernate 主细节删除

sql - 最终REBUILD WITH()的SQL语法错误

c# - 如何使用 Entity Framework Core 在具有默认值的 boolean 值上设置另一个值?

sql - 更改表添加列语法

sql - 如何将列名转换为 SQL Server 中的结果值?

sql-server-2008 - 消息 102,级别 15,状态 1,第 1 行 '< ' 附近语法错误

SQL 将周数转换为日期 (dd/MM)