对不起,我无法想出一个更好的标题。SQL Server每分钟行数
我有一张表,每次有人打我的JSON API时插入一行。本质上它有2列,Ipaddress
(nvarchar
)和date
(datetimeoffset
)。
我的问题的一部分是,我不确定如何定义我想要的数据,但总体上我试图找出是否有人在我的api上玩shenanigans。
我认为我在寻找的是每ip地址每秒/分钟的平均请求数。
任何人都可以帮我写一个查询吗?
对不起,我无法想出一个更好的标题。SQL Server每分钟行数
我有一张表,每次有人打我的JSON API时插入一行。本质上它有2列,Ipaddress
(nvarchar
)和date
(datetimeoffset
)。
我的问题的一部分是,我不确定如何定义我想要的数据,但总体上我试图找出是否有人在我的api上玩shenanigans。
我认为我在寻找的是每ip地址每秒/分钟的平均请求数。
任何人都可以帮我写一个查询吗?
今天看到,通过IP,每分钟:
DECLARE @day DATE = CURRENT_TIMESTAMP;
WITH x AS (
SELECT Ipaddress, m = DATEADD(MINUTE, DATEDIFF(MINUTE, @day, [date]), @day)
FROM dbo.tablename
WHERE CONVERT(DATE, [date]) = @day
)
SELECT Ipaddress, m, c = COUNT(*)
FROM x
GROUP BY Ipaddress m
ORDER BY c DESC; -- OR ORDER BY m
你可以进一步推导从数据的平均值,并根据您认为什么是指示“恶作剧”的过滤器...
谢谢,这让我指出了正确的方向。你能否详细说明你为什么使用CTE来做这件事?看起来我可以运行一个非常类似的查询而没有一个。我只是因为我以前从未使用CTE而想要了解更多。谢谢。 – Erick
@Erick只是偏爱更现代的风格,当你有多个子查询而不是一个子查询时,它更容易被接受。您可以轻松地将所有内容从CTE中取出并插入到'FROM'和'x'之间。 –
你应该定义什么是“扮演诡计”对你来说。 (是每分钟10,20,50个请求吗?取决于你有什么类型的应用程序) –