【问题标题】:SQL query seconds to date (Ssms12)迄今为止的 SQL 查询秒数 (Ssms12)
【发布时间】:2016-09-19 11:17:08
【问题描述】:

在 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 子句中。

【问题讨论】:

    标签: sql sql-server ssms ssms-2012


    【解决方案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。

    【讨论】:

    • tx :-) MAX 是问题,因为我不想分组
    【解决方案2】:

    很可能你不需要 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
    

    【讨论】:

    • 我希望我自己找到了 Thad,感谢您的帮助
    【解决方案3】:

    确保您拥有运行表的必要权限,如果该表存在并且您具有读取表的必要权限,则使用下面的完整限定表

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-14
      • 1970-01-01
      • 1970-01-01
      • 2013-03-06
      相关资源
      最近更新 更多