我正在尝试计算两个不同时间之间的持续时间。这是我的原始查询及其结果:
SELECT
[DJ_NUMBER]
,[PROCESSING_ACTION]
,[TRANSACTION_QTY]
,[MES_MACHINE]
,[ACTION]
,[ACTION_TIME]
,[UNIQUE_ID]
FROM [StagingDB].[dbo].[AFL_MES2O_Interface_Data_arch]
-- where ACTION in ('SetUp Start', 'Run Start','Run End')
WHERE PROCESSING_ACTION = 'Job Status'
Order by DJ_NUMBER asc, ACTION_TIME
[![SourceData][1]][1]
我尝试使用DateDiff函数,但出现转换问题。我的“运行结束”和“运行开始”是字符串格式:
DATEDIFF(分钟,“运行结束”,“运行开始”) 我需要通过Pivot Operator获得以下信息: 持续时间1 =“运行开始”-“设置开始” 持续时间2 =“运行结束”-“运行开始”
最终输出应如下所示:
DJ_NUMBER持续时间1(分钟)持续时间2(分钟) 19483257 0 50 19483258 0 4.00
这是我的数据透视表运算符。这是我的代码:
SELECT DJ_NUMBER
, 'SetUp Start' as [SetUp]
,'Run Start' as [RunStart]
,'Run End' as [RunEnd]
-- ,DATEDIFF(Minute,'Run End','Run Start')
FROM
(
SELECT DJ_NUMBER,ACTION,ACTION_TIME
FROM [StagingDB].[dbo].[AFL_MES2O_Interface_Data_arch]
) As SourceData
PIVOT
(
COUNT( ACTION_TIME)
FOR ACTION IN ([SetUp Start], [Run Start],[Run End])
) AS PIVOTTABLE
Order by DJ_NUMBER asc
[![PivotOperaot Code][4]][4]
在计算数据透视表中的持续时间方面的任何帮助将不胜感激。
谢谢..
答案 0 :(得分:0)
由于没有人回答我的问题,所以我能够自己弄清楚。这是任何有兴趣的人的解决方案:
SELECT
A.MES_MACHINE AS LineNo
,A.DJ_NUMBER
,A.ACTION as SetupStarted
,A.ACTION_TIME AS SetupStart
,B.ACTION as RunStarted
,B.ACTION_TIME AS UpTimeStart
,C.ACTION as RunEnded
,C.ACTION_TIME AS UpTimeEnd
,FORMAT(DATEDIFF(SECOND, A.ACTION_TIME, B.ACTION_TIME)/60.0,'##.##') AS Setup
,FORMAT(DATEDIFF(SECOND, B.ACTION_TIME, C.ACTION_TIME)/60.0, '##.##') AS UpTime
FROM [StagingDB]。[dbo]。[AFL_MES2O_Interface_Data_arch] A,[StagingDB]。[dbo]。[AFL_MES2O_Interface_Data_arch] B,[StagingDB]。[dbo]。[AFL_MES2O_Interface_Data_arch] C 哪里(B.DJ_NUMBER = A.DJ_NUMBER和B.ACTION_TIME> A.ACTION_TIME)和(C.DJ_NUMBER = B.DJ_NUMBER和C.ACTION_TIME> B.ACTION_TIME)