2012-06-11 122 views
0

表中顯示爲最後15分鐘的會議記錄(日誌分析器)的結構是:編寫一個查詢日誌文件

Table of Log

我想提請顯示數的折線圖Sessions的最後15分鐘到當前時間(每分鐘)。我想寫這顯示兩列以下信息查詢:

  1. 日期:小時:分鐘的會議

我試圖寫一個簡單的查詢顯示每小時的請求

  • 號碼:

    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; 
    

    我試着創建一個類似於上面的查詢,但它顯示wromg結果。它應該每15分鐘顯示一次會話數。並且group by子句將保持不變(例如,每分鐘)例如:在10:00:00,它應該表示在過去15分鐘到10:00:00的會話數(sessionID),即:9:45:00到10:00:00等

  • 回答

    0

    這個有點複雜。首先,您需要創建一個TimeSlot表格,將一天的時間分爲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; 
    

    試試吧。我沒有檢查它在多個日期中的工作情況,但它確實是一個日期。