1

私は次のクエリを実行しようとしています:

SELECT  
  A.STEPNAME, 
  A.BRDATE BRDATE_A, 
  B.BRDATE BRDATE_B, 
  MIN(A.STARTTIME) STARTTIME_A, 
  MAX(A.ENDTIME) ENDTIME_A, 
  MIN(B.STARTTIME) STARTTIME_B, 
  MAX(B.ENDTIME) ENDTIME_B, 
  'RUNTIME_A' = convert(VARCHAR,DATEDIFF(MINUTE,A.STARTTIME,A.ENDTIME),108) ,
  'RUNTIME_B' = convert(VARCHAR,DATEDIFF(MINUTE,B.STARTTIME,B.ENDTIME),108) 
FROM 
  CB_OPX_AUDIT_HIST A, 
  CB_OPX_AUDIT_HIST B
WHERE  
  A.BRDATE = ('05/11/2012') 
AND 
  B.BRDATE = ('05/16/2012') 
AND 
  A.BR = '03'
AND 
  A.STEPNAME=B.STEPNAME
AND 
  A.BR=B.BR
GROUP BY 
  A.STEPNAME, 
  A.ENDTIME, 
  A.STARTTIME,
  A.BRDATE,
  B.BRDATE,
  B.ENDTIME, 
  B.STARTTIME
ORDER BY  
  A.STARTTIME

'RUNTIME_A'と'RUNTIME_B'の違いが必要です。

誰かが上記のクエリの違いを取得する方法を教えてもらえますか?

4

3 に答える 3

0

クエリ全体を別のSELECTステートメントでラップします。また、外側のselectステートメントでは、を選択するだけRUNTIME_A - RUNTIME_Bです。

于 2012-05-17T22:20:58.937 に答える
0

「違いを生む」とはどういう意味ですか?

あなたはすでに数分で違いを手に入れています、それは常に1日未満ですか?

これはどのように機能しますか?

DATEADD(
  minute,
  DATEDIFF(minute, A.STARTTIME, A.ENDTIME)
  -
  DATEDIFF(minute, B.STARTTIME, B.ENDTIME),
  0
)

または...

CONVERT(
  VARCHAR(8),
  DATEADD(
    minute,
    DATEDIFF(minute, A.STARTTIME, A.ENDTIME)
    -
    DATEDIFF(minute, B.STARTTIME, B.ENDTIME),
    0
  ),
  108
)
于 2012-05-17T22:22:08.000 に答える
0

簡単にするために、VARCHARの使用からDATETIMEの使用に変更して、単純なdatediffを再度実行することをお勧めします。

DATEDIFF(MINUTE, 
    convert(DATETIME,DATEDIFF(MINUTE,A.STARTTIME,A.ENDTIME),108), 
    convert(DATETIME,DATEDIFF(MINUTE,B.STARTTIME,B.ENDTIME),108)
)

元のクエリをサブクエリとしてラップして、物事を単純化することができます。

于 2012-05-17T22:23:26.620 に答える