2016-04-15 120 views
-2

我有一個當前正在處理作業的服務器。示例15分鐘遞增查詢

JobName    avgStartTime  avgEndTime 
job1     00:31:05.5500000 00:37:35.6170000 
job2     00:35:05.5500000 00:45:35.6170000 
job3     00:54:24.0600000 01:04:22.5700000 
job4     05:07:12.9100000 06:04:59.7800000 
job5     20:48:04.6870000 21:08:20.1430000 
job6     19:40:24.6870000 19:57:48.4570000 

我想創建一個查詢,該列將以15分鐘爲增量提供一列,另一個作業將在這15分鐘內處理。例如, 。

Interval NumberOfJobs JobName 
00:00:00 0 
00:15:00 0 
00:30:00 2    Job1 
          Job2 
00:45:00     Job3 
01:00:00     Job3 
01:15:00  

這是我的查詢來計算15分鐘的增量。

CREATE TABLE #15MinuteIncrements(Increment DATETIME 
         , PRIMARY KEY(Increment)); 

DECLARE @dIncr DATETIME = 
        (SELECT CONVERT(DATETIME, CONVERT(DATE, GETDATE()))); 

DECLARE @dEnd DATETIME = 
        (SELECT CONVERT(DATETIME, CONVERT(DATE, 
                (SELECT DATEADD(day, 1, GETDATE()))))); 

WHILE(@dIncr < @dEnd) 
    BEGIN 
     INSERT INTO     #15MinuteIncrements(Increment) 
     VALUES 
      (@dIncr); 
     SELECT @dIncr = DATEADD(MINUTE, 15, @dIncr); 
    END; 
GO 
+0

你到目前爲止試過什麼查詢? –

+0

我剛剛以15分鐘的增量插入臨時表,然後我將它加入到我的表中。但是,我仍然沒有得到我想要的數字。 – Will

+0

這裏是我的查詢來計算15分鐘的增量: – Will

回答

0

認爲這會工作,使用#15MinuteIncrements表。它使用多個表,但是可以將其解析爲子查詢。

CREATE TABLE time_log_A AS 
SELECT 
    JobName, 
    SEC_TO_TIME(FLOOR((TIME_TO_SEC(avgEndTime)+450)/900)*900) AS I 
FROM 
    time_log 
; 

CREATE TABLE time_log_B AS 
SELECT 
    I, 
    COUNT(DISTINCT JobName) AS NumberOfJobs 
FROM 
    time_log_A 
GROUP BY 
    I 
; 

SELECT DISTINCT 
    INC.Increment AS "Interval", 
    B.NumberOfJobs, 
    A.JobName 
FROM 
    #15MinuteIncrements INC 
    LEFT JOIN time_log_A A 
     ON A.I = INC.Increment 
    LEFT JOIN time_log_B B 
     ON A.I = INC.Increment 
ORDER BY 
    INC.Increment, 
    A.JobName 
;