2016-07-15 6 views
0

nazwa、wartosc、czasを含むプロセスデータを持つテーブルがあります。2レコード間の差(時間)の計算 - mssql

;WITH [cteRows] AS 
(
    SELECT [nazwa], 
      [wartosc], 
      [czas], 
      ROW_NUMBER() OVER (ORDER BY [czas]) AS [RowNumber] 
    FROM [test].[dbo].[coldbox7] 
    WHERE [nazwa] = 'coldbox7/WymianaDanychDB/Hydraulic' 
    AND [czas] >= '2016-07-14 22:00:00.000' 
    AND [czas] <= '2016-07-14 22:30:00.000' 
) 
SELECT mc.[RowNumber], 
     mc.[czas], 
     mc.[nazwa], 
     mc.[wartosc], 
     DATEDIFF(SECOND, mc.[czas], ISNULL(mp.[czas], mc.[czas])) AS [Wsekundach] 
FROM [cteRows] mc 
LEFT JOIN [cteRows] mp 
    ON mc.[RowNumber] = mp.[RowNumber] + 1 
WHERE mc.[wartosc] = 0 

と出力look like:

私は質問があります: はどのように私は代わりに、現在の出力の[Wsekundach]の1点の行の合計を作ることができるのテーブルデータは、今私は、クエリを書いたthis

のようなものを見て?

+0

他の列はすべての行でさまざまなデータを持っています:結果が1行に減らされた場合は、どの情報をそこに表示しますか? – Shnugo

+0

私はすべての時差についての情報を持っています。 [Wsekundach] –

+0

最初の行と最後の行の違いだけではありませんか? –

答えて

0

すると、次の試してみてください。

;WITH [cteRows] AS 
(
    SELECT [nazwa], 
      [wartosc], 
      [czas], 
      ROW_NUMBER() OVER (ORDER BY [czas]) AS [RowNumber] 
    FROM [test].[dbo].[coldbox7] 
    WHERE [nazwa] = 'coldbox7/WymianaDanychDB/Hydraulic' 
    AND [czas] >= '2016-07-14 22:00:00.000' 
    AND [czas] <= '2016-07-14 22:30:00.000' 
) 

, cteNewRows AS 
(
    SELECT mc.[RowNumber], 
      mc.[czas], 
      mc.[nazwa], 
      mc.[wartosc], 
      DATEDIFF(SECOND, mc.[czas], ISNULL(mp.[czas], mc.[czas])) AS [Wsekundach] 
    FROM [cteRows] mc 
    LEFT JOIN [cteRows] mp ON mc.[RowNumber] = mp.[RowNumber] + 1 
    WHERE mc.[wartosc] = 0 
) 

SELECT SUM(Wsekundach) AS SumOfWsekundach 
FROM cteNewRows 
+0

私は回線に欠陥があります: ; WITH cteNewRows AS ';'の近くの構文が正しくありません。 –

+0

@ G.Dabrowski、クエリが編集されました。 –

+0

非常にありがとう、また私はどのように私は最後の行がwartosc = 1を持っていることを教えてもらえますか?[Wsekundach] 7日の間の長さistと '2016-07-14 22:30: 00.000 ' –

0

あなたが違いである1行をしたい場合、私はあなたがはるかに簡単なクエリを使用することができると思う:

 SELECT DATEDIFF(SECOND, MIN(c.[czas]), MAX(c.[czas]) 
     FROM [test].[dbo].[coldbox7] c 
     WHERE [nazwa] = 'coldbox7/WymianaDanychDB/Hydraulic' AND 
      [czas] >= '2016-07-14 22:00:00.000' AND 
      [czas] <= '2016-07-14 22:30:00.000' AND 
      c.[wartosc] = 0; 

だけで最大に基づいて合計を行うと、最小値はです。中間合計を合計するより効率的です。