这是我的查询

Select
    AgentActivityLog.StatusDateTime,
    AgentActivityLog.UserId,
    AgentActivityLog.StateDuration /60 AS Minutes,
    AgentActivityLog.StatusKey
FROM UserWorkgroups
INNER JOIN AgentActivityLog ON UserWorkgroups.UserId = AgentActivityLog.UserId
WHERE
   AgentActivityLog.StatusDateTime Between '08/01/2013' AND '08/02/2013' AND
   StatusKey IN ('Shadow Trainer') AND
    (UserWorkgroups.WorkGroup in ('LV_GR_9','LV_CCS_GENERAL','LV_PBX_INTERNAL'))
ORDER BY
    AgentActivityLog.StatusDateTime,
    AgentActivityLog.UserId,
    AgentActivityLog.StatusKey,
    AgentActivityLog.StateDuration

结果
2013-08-01 08:59:03.000 JMENDOZA1   13  Shadow Trainer
2013-08-01 09:13:50.000 JMENDOZA1   12  Shadow Trainer

我希望结果总结当天的 StateDuration
像这样的东西
2013-08-01 08:59:03.000 JMENDOZA1 25    Shadow Trainer.

感谢您的帮助。

最佳答案

使用 GROUP BY UserId ,因此具有相同用户 ID 的行被分组。在 SELECT 列表的其余列中,必须应用聚合函数。您需要 SUM()StateDurationMIN()MAX() (或两者!)的 StatusDateTime

您还可以使用别名来提高可读性:

SELECT
    MIN(aal.StatusDateTime) AS MinStatusDateTime,
    MAX(aal.StatusDateTime) AS MaxStatusDateTime,
    aal.UserId,
    SUM(aal.StateDuration / 60) AS Minutes,
    'Shadow Trainer' AS StatusKey
FROM UserWorkgroups AS uw
  INNER JOIN AgentActivityLog AS aal ON uw.UserId = aal.UserId
WHERE
    aal.StatusDateTime BETWEEN '2013-08-01' AND '2013-08-02' AND
    aal.StatusKey IN ('Shadow Trainer') AND
    uw.WorkGroup IN ('LV_GR_9','LV_CCS_GENERAL','LV_PBX_INTERNAL')
GROUP BY
    aal.UserId
ORDER BY
    MinStatusDateTime,
    UserId,
    StatusKey,
    Minutes ;

关于mysql - 如果两行相等,如何求和?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18755702/

10-14 00:30