Sql server 选择每秒IIS方法调用的平均计数

Sql server 选择每秒IIS方法调用的平均计数,sql-server,tsql,Sql Server,Tsql,我试图找出在一周的时间跨度内平均每秒IIS呼叫数(GET、POST、PUT等) 下面是一个用于获取一周总计数的选择示例: SELECT Method, COUNT(*) AS TotalCalls FROM IISLog WHERE dDate BETWEEN '2018-05-10' AND '2018-05-17' GROUP BY Method 如何使用此选择来获得此日期范围内每秒的平均方法调用计数 每秒呼叫的预期输出: Method

我试图找出在一周的时间跨度内平均每秒IIS呼叫数(GET、POST、PUT等)

下面是一个用于获取一周总计数的选择示例:

  SELECT Method, COUNT(*) 
      AS TotalCalls
    FROM IISLog
   WHERE dDate 
 BETWEEN '2018-05-10' 
     AND '2018-05-17'
GROUP BY Method
如何使用此选择来获得此日期范围内每秒的平均方法调用计数

每秒呼叫的预期输出:

Method    CallsPerSecond
Get       15
Put       10
Post      14
Delete    12

计数只是示例估计值

只需除以构成筛选范围的秒数即可

DECLARE @StartDate DATETIME = '2018-05-10'
DECLARE @EndDate DATETIME = '2018-05-17'

SELECT 
    Method, 
    CallsPerSecond = COUNT(*) / NULLIF(DATEDIFF(SECOND, @StartDate, @EndDate), 0),
    TotalCalls = COUNT(*)
FROM 
    IISLog AS I
WHERE 
    I.dDate BETWEEN @StartDate AND @EndDate
GROUP BY 
    I.Method

那么,你的问题到底是什么?你已经陈述了你的目标,很好,你已经提供了你的预期结果,也很好。你给我们的SQL也很好。但是,您还没有提出问题。另一方面,在'2018-05-10'和'2018-05-10'之间的
WHERE-dDate
子句与
WHERE-dDate='2018-05-10'
(这将只返回时间正好为
00:00.0000000
的行)相同。您在这里的
中间声明的目标是什么?如果要返回当天任何时间出现的行,则将是
,其中dDate>='20181005'和dDate<'20181006'
。(假设您的格式是
yyyy-dd-MM
)@Larnu抱歉,Larnu,编辑后添加了问题并将结束日期更改为“2018-05-17”,您比我快了一步:然而,PI建议将@StartDate和@EndDate之间的
I.dDate改为
I.dDate>=@StartDate和I.dDate<@EndDate
,因为
之间的
将包括日期时间
2018-05-17T00:00:00.000
(但从那一天起没有其他时间)。