执行SQL Server查询时出现问题

时间:2012-05-17 22:17:14

标签: sql sql-server-2008

我正在尝试运行以下查询:

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'之间的区别..

有人能告诉我如何在上述查询中找到差异。?

3 个答案:

答案 0 :(得分:0)

将您的整个查询包含在另一个SELECT语句中。在外部选择语句中,您只需选择RUNTIME_A - RUNTIME_B

答案 1 :(得分:0)

你究竟是什么意思“找到差异”?

你已经在几分钟内得到了差异,它总是不到一天吗?

这对你有什么用?

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
)

答案 2 :(得分:0)

为简单起见,我建议只使用VARCHAR更改为使用DATETIME并再次运行一个简单的日期替换

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

您可以将原始查询包装为子查询以简化操作。