如果两行相等,如何求值?

时间:2013-09-12 05:01:55

标签: mysql sql

这是我的查询

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.

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

使用GROUP BY UserId,因此将具有相同用户ID的行分组。在SELECT列表的其余列中,必须应用聚合函数。对于SUM(),您需要StateDuration MIN()以及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 ;