【问题标题】:Calculate DateDiff Challenge Via Pivot Operator通过 Pivot 运算符计算 DateDiff 挑战
【发布时间】:2019-01-18 15:39:41
【问题描述】:

我正在尝试计算两个不同时间之间的持续时间。这是我的原始查询及其结果:

  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 Duration1(分钟) Duration2(分钟) 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]

任何帮助计算数据透视表中的持续时间将不胜感激。

谢谢你..

【问题讨论】:

  • 运行结束日期和运行开始日期的格式是什么?
  • 字符串 (VARCHAR)

标签: sql-server pivot-table


【解决方案1】:

由于没有人回答我的问题,我自己就能弄清楚。这是任何有兴趣的人的解决方案:

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 WHERE (B.DJ_NUMBER = A.DJ_NUMBER AND B.ACTION_TIME > A.ACTION_TIME) 和 (C.DJ_NUMBER = B.DJ_NUMBER AND C.ACTION_TIME > B.ACTION_TIME)

【讨论】:

  • L17 20219539 设置开始 2018-10-27 09:11:06.000 运行开始 2018-10-27 09:51:39.000 运行结束 2018-10-27 10:24:13.000 40.55 32.56 L17 2037设置开始 2018-11-20 06:30:17.000 运行开始 2018-11-20 06:48:15.000 运行结束 2018-11-20 07:25:20.000 17.97 37.08
猜你喜欢
  • 2020-04-15
  • 2013-03-30
  • 1970-01-01
  • 2021-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多