2015-02-06 84 views
-1

我從一個計數器接收數據,並且我想創建一個打印每小時增加多少的報告。SQL:SELECT FROM(SELECT,SELECT)

我做了這個查詢,但我不能從0到23小時

SELECT [COLUMN_A], 
     [COLUMN_B], 
     [COLUMN_A] - [COLUMN_B] AS TOTAL 


FROM (
    (SELECT MAX([_Counter]) AS COLUMN_A 
    FROM [DADOS].[dbo].Table_Producao] 
    WHERE DatePart(HOUR, _TimeStamp)=9)AS PART_A 

    CROSS JOIN(SELECT MAX([_Count]) AS COLUMN_B 
       FROM [DADOS].[dbo].[Table_Producao] 
       WHERE DatePart(HOUR, _TimeStamp)=8)AS PART_B 
    ) 

我有什麼做一個SELECT:

_TimeStamp    _Counter 
2015-02-03 14:00:00.000  2 
2015-02-03 14:59:00.000  15 
2015-02-03 15:00:00.000  17 
2015-02-03 15:30:00.000  30 
2015-02-03 15:59:00.000  42 
2015-02-03 16:00:00.000  43 
2015-02-03 16:30:00.000  50 
2015-02-03 16:59:00.000  59 
2015-02-03 17:00:00.000  61 
2015-02-03 17:30:00.000  70 
2015-02-03 17:50:00.000  82 
2015-02-03 18:00:00.000  86 
2015-02-03 18:30:00.000  90 
2015-02-03 18:59:00.000  99 
2015-02-03 19:00:00.000  102 
2015-02-03 19:30:00.000  115 
2015-02-03 19:59:00.000  124 
2015-02-03 20:00:00.000  126 
2015-02-03 20:30:00.000  137 
2015-02-03 20:59:00.000  145 
2015-02-03 21:00:00.000  147 

我想要什麼:

_TimeStamp  _Counter 
14h     17 
15h     27 
16h     17 
17h     23 
18h     17 
19h     25 
20h     21 
21h     2 

任何想法?請

回答

0

試試這個。

SELECT Cast(Datepart(hh, [_timestamp]) AS VARCHAR(3))+ 'h', 
     Sum(_counter) 
FROM your_result 
GROUP BY Cast(Datepart(hh, [_timestamp]) AS VARCHAR(3))+ 'h', 
      Cast(_timestamp AS DATE) 
+1

請解釋你的答案在努力幫助OP瞭解您的解決方案的代碼做什麼 – indubitablee 2015-02-06 18:26:19

0

我解決了我的qestion與此查詢:

WITH QUERY1 AS 
    (SELECT MAX(_Counter) AS MAX_1, Datepart(hh, [TimeStamp]) AS _TIMESTAMP1 
    FROM Table 
    WHERE Cast(DatePart(hh, TimeStamp)AS int) IN (SELECT Cast(Datepart(hh, [TimeStamp]) AS int) 
    FROM Table 
    WHERE TimeStamp>=CAST('<%DataQuery%>'+' 00:00:00.000' AS DATETIME) AND TimeStamp<=CAST('<%DataQuery%>'+' 23:59:59.999' AS DATETIME) 
    ) 
    GROUP BY Cast(Datepart(hh, [TimeStamp])AS int)), 

    QUERY2 AS 
    (SELECT MAX(_Counter) AS MAX_2, Datepart(hh, [TimeStamp]) AS _TIMESTAMP2 
    FROM PLASCAR_DADOS.dbo.Table_Producao 
    WHERE Cast(DatePart(hh, TimeStamp)AS int) IN (SELECT Cast(Datepart(hh, [TimeStamp]) AS int)+1 
    FROM Table 
    WHERE TimeStamp>=CAST('<%DataQuery%>'+' 00:00:00.000' AS DATETIME) AND TimeStamp<=CAST('<%DataQuery%>'+' 23:59:59.999' AS DATETIME) 
    ) 
    GROUP BY Cast(Datepart(hh, [TimeStamp])AS int)) 


    SELECT _TIMESTAMP1, MAX_2-MAX_1 AS TOTAL 
    FROM QUERY1 INNER JOIN QUERY2 ON _TIMESTAMP1 =_TIMESTAMP2-1 
相關問題