到目前为止的SQL查询秒数(Ssms12)

时间:2016-09-19 11:17:08

标签: sql sql-server ssms ssms-2012

在fount Thad select CONVERT(CHAR(10), DATEADD(second, MAX(60), 0), 108)的stackoverflow站点上的

将导致00:01:00(那是真正的btw :-))

现在我想在以下查询中集成它(对于Ssms12):

SELECT Run.TaskName,history.runtime
,CONVERT(CHAR(10), DATEADD(second, MAX(history.runtime), 0), 108)

FROM dbo.history
INNER JOIN Run
ON dbo.history.TaskID=Run.TaskID

无论我尝试什么,我都无法在上面的例子中使用它,有没有人知道如何解决这个问题?

错误:列' Run.TaskName'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。

3 个答案:

答案 0 :(得分:1)

您必须按其他未使用聚合函数的列进行分组:

SELECT Run.TaskName,history.runtime,
   CONVERT(CHAR(10), DATEADD(second, history.runtime, 0), 108)
FROM dbo.history
INNER JOIN Run ON dbo.history.TaskID=Run.TaskID

您正在使用MAX进行运行,因此您可以这样做:

SELECT Run.TaskName,MAX(history.runtime) runtime,
    CONVERT(CHAR(10), DATEADD(second, MAX(history.runtime), 0), 108)
FROM dbo.history
INNER JOIN Run ON dbo.history.TaskID=Run.TaskID
GROUP BY Run.TaskName

这意味着您必须从运行时删除MAX,或者必须对其余列使用group by。

答案 1 :(得分:1)

很可能你不需要MAX。 select CONVERT(CHAR(10), DATEADD(second, 60, 0), 108)没问题,所以

SELECT Run.TaskName,history.runtime
      ,CONVERT(CHAR(10), DATEADD(second, history.runtime, 0), 108)
FROM dbo.history 
INNER JOIN dbo.Run
    ON dbo.history.TaskID=dbo.Run.TaskID

答案 2 :(得分:0)

如果表存在并且您具有读取表的必要权限,请确保您具有Run table的必要权限并使用如下所示的完整限定表

SELECT Run.TaskName,history.runtime
      ,CONVERT(CHAR(10), DATEADD(second, MAX(history.runtime), 0), 108)
FROM dbo.history 
INNER JOIN dbo.Run
    ON dbo.history.TaskID=dbo.Run.TaskID