2016-08-15 11 views
1

私が私に与えられたマシンの生産運転で発生したイベントのタイムスタンプの間の秒数を返すクエリを持っています。合計タイムスタンプのSQL Serverの間の経過時間

私はその期間中の機械のからstatusCodeでグループ化された時間の合計を取得したいです。 Ex。実行中、予期しないダウンタイム、計画されたダウンタイム。

私は、これが、私が知っていることが分かっている集合体の集合体を含んでいると思います。私は、私はあなたがほとんどそれを持っていたと思います

SELECT 
    p1.productionRunId, 
    p1.statusCodeId, 
    DATEDIFF(SECOND, MAX(p2.startTime), p1.startTime) AS seconds 
FROM 
    productionLog p1 
INNER JOIN 
    wincc.dbo.productionLog p2 ON p1.productionRunId = p2.productionRunId 
           AND p2.startTime < p1.startTime 
GROUP BY 
    p1.startTime, p1.productionRunId, p1.statusCodeId 

Here is a picture of my current results with a description of what I would like.

+0

'group by'から' p.startTime'を削除してください。 –

答えて

1

かかわらず、これを行う方法があることを確認しています。上記のSELECTクエリを別のクエリのサブクエリとして使用して、期間の合計を処理することができます。これがあなたが探しているものかどうかを確認してください:

declare @p table (startTime datetime, productionRunId int, statusCodeId int) 

insert @p values 
('1/1/2016 15:43:00', 1, 1), 
('1/1/2016 15:43:05', 1, 1), 
('1/1/2016 15:43:01', 2, 2), 
('1/1/2016 15:43:09', 2, 2), 
('1/1/2016 15:44:02', 2, 2), 
('1/1/2016 15:44:09', 2, 2), 
('1/1/2016 15:44:31', 3, 1), 
('1/1/2016 15:44:45', 3, 1) 

SELECT 
    productionRunId, 
    statusCodeId, 
    SUM(seconds) AS totalSeconds 
FROM (
    SELECT 
     p1.productionRunId, 
     p1.statusCodeId, 
     DATEDIFF(SECOND, MAX(p2.startTime), p1.startTime) AS seconds 
    FROM @p p1 
    INNER JOIN @p p2 ON p1.productionRunId = p2.productionRunId 
    AND p2.startTime < p1.startTime 
    GROUP BY 
     p1.startTime, 
     p1.productionRunId, 
     p1.statusCodeId 
) AS ElapsedPeriods 
GROUP BY 
    productionRunId, 
    statusCodeId 
+0

本当にありがとうございました!!それはそれだった。 –

+0

@ZackScriven - これが/あなたの答えだったら、答えの左側にある灰色のチェックボックスを使ってそれをマークしてください。 – Igor

関連する問題