Sql 写入查询以在日志文件中显示最近15分钟会话的记录

Sql 写入查询以在日志文件中显示最近15分钟会话的记录,sql,sql-server,tsql,Sql,Sql Server,Tsql,TableLog Analyzer的结构是: 我想画一个折线图,显示过去15分钟到每分钟当前时间的会话数。我想编写一个查询,其中显示两列,其中包含以下信息: 日期:小时:分钟 会议次数 我尝试编写一个示例查询,显示每小时的请求数: select convert(nvarchar(16), L.TimeLog, 120) requestTime ,(select Count(SessionID) from LogData where TimeLog < convert(nvarchar

TableLog Analyzer的结构是:

我想画一个折线图,显示过去15分钟到每分钟当前时间的会话数。我想编写一个查询,其中显示两列,其中包含以下信息:

日期:小时:分钟 会议次数 我尝试编写一个示例查询,显示每小时的请求数:

select  convert(nvarchar(16), L.TimeLog, 120) requestTime ,(select Count(SessionID) from LogData where TimeLog <  convert(nvarchar(16), TimeLog, 120) and TimeLog >  DATEADD (mi , -15 , convert(nvarchar(16), TimeLog, 120) ) ) AS Sessions
from  LogData L
group by convert(nvarchar(16), TimeLog, 120) order by requestTime;

我试图创建一个类似于上面的查询,但它显示了错误的结果。它应该每15分钟显示一次会话数。而group by子句将保持不变,即每分钟。例如:在10:00:00,它应该表示过去15分钟到10:00:00的会话ID的数量,即:9:45:00到10:00:00,依此类推。这一个变得有点复杂。首先,您需要创建一个时间段表,将一天分成15分钟的时间段

CREATE TABLE [TimeSlot](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [BeginTime] [datetime] NULL,
    [EndTime] [datetime] NULL
) ON [PRIMARY]
填写表格:

DECLARE @Start DATETIME
SET @Start='00:00:00'

WHILE (@Start <'23:59:00')
BEGIN
    INSERT INTO TimeSlot(BeginTime, EndTime) values (@Start,dateadd(mi,15,@Start))
    SET @Start=dateadd(mi,15,@Start)
END
然后,对于丑陋的SQL:

SELECT  convert(nvarchar(8), L.TimeLog,112) + ' ' +  convert(nvarchar(8), S.BeginTime, 108) AS SlotBeginTime ,Count(LogID) AS Sessions
FROM  LogData L, TimeSlot S
WHERE (convert(nvarchar(8), L.TimeLog,112) +  convert(nvarchar(8), L.TimeLog, 108))  >= (convert(nvarchar(8), L.TimeLog,112)+ convert(nvarchar(8), S.BeginTime,108)) 
  AND (convert(nvarchar(8), L.TimeLog,112) +  convert(nvarchar(8), L.TimeLog, 108))  < (convert(nvarchar(8), L.TimeLog,112)+ convert(nvarchar(8), S.EndTime,108))
GROUP BY convert(nvarchar(8), L.TimeLog,112) + ' ' +  convert(nvarchar(8), S.BeginTime, 108) 
ORDER BY SlotBeginTime;
试试看。我没有检查它在多个日期之间的工作情况,但在一次约会中确实如此