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