【发布时间】:2014-03-25 13:34:50
【问题描述】:
我正在创建一个时间跟踪系统,但我正在努力处理一个相当复杂的 SQL 查询。
基本上,我想为当前记录工作会话的特定模块创建所有作业的列表,包括每个作业花费的总时间。
到目前为止,我使用TIMESTAMPDIFF() 比较StartTime 和EndTime 列,以计算在该特定工作会话上花费的总时间为TimeSpent。但是,我很难理解如何将工作会话按 AssignmentID 分组,然后将 SUM() 所有 TimeSpent 列组合在一起以得出总体总数。
这是我到目前为止所构建的。
SELECT t2.*,
SUM( TIMESTAMPDIFF(second, t1.StartTime, t1.EndTime) ) AS TimeSpent
FROM work_session t1
LEFT JOIN assignment t2 ON t1.AssignmentID = t2.AssignmentID
LEFT JOIN module t3 ON t2.ModuleID = t3.ModuleID
LEFT JOIN course t4 ON t3.CourseID = t4.CourseID
WHERE t2.ModuleID = 3
GROUP BY t1.AssignmentID
【问题讨论】:
-
考虑提供适当的 DDL(和/或 sqlfiddle)以及所需的结果集。另外,请注意,您的 WHERE 条件将 t3 呈现为 INNER JOIN。如果您需要 OUTER JOIN,请将其移至 JOIN 子句。
-
您需要在 group by 子句中包含 select 中的所有列才能使其正常工作。还要查看 Group By Grouping Sets((All columns))
-
@Jaypal MySQL 允许选择 GROUP BY 中未列出的列,它返回相应组中的任何值。
-
请告诉我们您的问题。在我看来,你的陈述应该有效。不是吗?
-
@ThorstenKettner 最初我的结果显示 TimeSpent 列的一些负数。然而,在回顾我的 work_session 表后,我意识到一些 StartTimes 实际上是在 EndTimes 之后。正如您所说,该声明本身是正确的并且运行良好。我只是忽略了检查数据本身是否正确。非常感谢让我重新回到原来的方向!
标签: mysql sql datetime group-by sum