データベースで失われたマシン時間の合計を計算しようとしています。テーブルの列は、MachineID、別名 PlantID、StartTime、EndTime です。
理論的には、単純にテーブルを machineID と StartTime で並べ替えてから、現在の行の StartTime を取得し、前の行の EndTime を減算します。
動作する私の現在のクエリは次のとおりです。
SELECT SUM([StartTime] - [EndTime]) AS TotalLostTime
FROM(SELECT *
FROM (SELECT ROW_NUMBER() OVER (ORDER BY [PlantID], [StartTime]) AS [Row],
[MachineRecords].PlantID , [MachineRecords].EndTime
FROM [MachineRecords]) AS a
JOIN (SELECT *
FROM (SELECT ROW_NUMBER() OVER (ORDER BY [PlantID],
[StartTime]) AS [Row1],
[MachineRecords].PlantID as PlantID1 ,
[MachineRecords].StartTime
FROM [MachineRecords]) as b) m
ON m.PlantID1 = a.[PlantID]
AND a.[Row] = m.[Row1]-1) lostTimeQuery
私の質問は次のとおりです:このクエリの同じ結果を達成するためのより良い(より簡潔な)方法はありますか?
助けてくれてありがとう。
編集:
wildplasser からのコメントの後、次のクエリを作成しました。
SELECT SUM(a.StartTime - a.LagEnd) as LostTime
FROM (SELECT [PlantID], [StartTime], [EndTime],
LAG([PlantID]) OVER (ORDER BY PlantID, StartTime) LagPlantID,
LAG([EndTime]) OVER (ORDER BY PlantID, StartTime) LagEnd
FROM MachineRecords) a
WHERE a.PlantID = a.LagPlantID