我有一个网站,在其中记录每个单击链接的 SQL Server 2008 数据库中的客户端指标。我已经编写了查询以获取每日总点击次数,但是我想了解用户在给定时间跨度内(即 5 秒内)点击了多少次。
这里的想法是锁定试图抓取内容的传入 IP 地址。假设在 5 秒内检测到超过 5 次“点击”或来自给定 IP 地址的每日点击次数超过某个值,则认为这是一次抓取尝试。
我尝试了以下几种变体:
-- when a user clicked more than 5 times in 5 seconds
SELECT DATEADD(SECOND, DATEDIFF(SECOND, 0, ClickTimeStamp), 0) as ClickTimeStamp, COUNT(UserClickID) as [Count]
FROM UserClicks
WHERE DATEDIFF(SECOND, 0, ClickTimeStamp) = 5
GROUP BY IPAddress, ClickTimeStamp
这一个特别返回以下错误:
消息 535,级别 16,状态 0,第 3 行 datediff 函数导致溢出。分隔两个日期/时间实例的日期部分的数量太大。尝试将 datediff 与不太精确的日期部分一起使用。
所以再一次,我想使用秒日期部分,我相信我在正确的轨道上,但不太明白。
帮助表示赞赏。谢谢。
- 更新 -
很好的建议,帮助我认为这种方法是错误的。每次点击都会进行检查。我应该做的是对于给定的时间戳,检查在最后 5 秒内是否记录了来自同一 IP 地址的 5 次点击。所以它就像,计算 > GetDate() - 5 秒的点击次数
尝试以下仍然不能给我一个准确的数字。
SELECT COUNT(*)
FROM UserClicks
WHERE ClickTimeStamp >= GetDate() - DATEADD(SECOND, -5, GetDate())