复杂的MySQL选择、分组、求和。

复杂的MySQL选择、分组、求和。,mysql,sql,Mysql,Sql,我有以下mysql查询: SELECT A.PK_USER_TIME_LOG_ID, A.CLIENT_ID, A.PROJECT_ID, A.USER_ID, A.UTL_DTSTAMP, /* DATE_FORMAT(A.UTL_DTSTAMP,'%H:%i:%s') AS UTL_DTSTAMP, */ A.UTL_LATITUDE, A.UTL_LONGITUDE, A.UTL

我有以下mysql查询:

SELECT A.PK_USER_TIME_LOG_ID,
       A.CLIENT_ID,
       A.PROJECT_ID,
       A.USER_ID,
       A.UTL_DTSTAMP,
       /* DATE_FORMAT(A.UTL_DTSTAMP,'%H:%i:%s') AS UTL_DTSTAMP, */
       A.UTL_LATITUDE,
       A.UTL_LONGITUDE,
       A.UTL_EVENT,
       A.UTL_ACTION,
       /* DURATION in seconds  */
       TIMESTAMPDIFF(SECOND, A.UTL_DTSTAMP, B.UTL_DTSTAMP) AS UTL_DURATION
FROM   tbl_user_time_log A
       INNER JOIN tbl_user_time_log B
               ON B.PK_USER_TIME_LOG_ID = ( A.PK_USER_TIME_LOG_ID + 1 )
WHERE  A.USER_ID = '465605'
       /* Between current pay period Start date and Current pay period end date */
       /* First day of the week is Monday.*/
       AND ( A.UTL_DTSTAMP BETWEEN '2018-01-22' AND '2018-01-28' )
       /* Filter out Clock Out. */
       AND A.UTL_EVENT <> 'CLOCK OUT'
ORDER  BY A.PK_USER_TIME_LOG_ID ASC;
…返回以下结果:

问题:

如何按UTL_操作分组并对其分组值求和

SELECT SUM(VALUE) FROM (
    SELECT A.PK_USER_TIME_LOG_ID,
       A.CLIENT_ID,
       A.PROJECT_ID,
       A.USER_ID,
       A.UTL_DTSTAMP,
       /* DATE_FORMAT(A.UTL_DTSTAMP,'%H:%i:%s') AS UTL_DTSTAMP, */
       A.UTL_LATITUDE,
       A.UTL_LONGITUDE,
       A.UTL_EVENT,
       A.UTL_ACTION,
       /* DURATION in seconds  */
       TIMESTAMPDIFF(SECOND, A.UTL_DTSTAMP, B.UTL_DTSTAMP) AS UTL_DURATION
    FROM   tbl_user_time_log A
       INNER JOIN tbl_user_time_log B
           ON B.PK_USER_TIME_LOG_ID = ( A.PK_USER_TIME_LOG_ID + 1 )
    WHERE  A.USER_ID = '465605'
       /* Between current pay period Start date and Current pay period end date */
       /* First day of the week is Monday.*/
       AND ( A.UTL_DTSTAMP BETWEEN '2018-01-22' AND '2018-01-28' )
       /* Filter out Clock Out. */
       AND A.UTL_EVENT <> 'CLOCK OUT'
    ORDER  BY A.PK_USER_TIME_LOG_ID ASC)
GROUP BY UTL_ACTION

以下是受其启发的解决方案

…这就是它看起来的样子:


错误:每个派生表都必须有自己的别名。请重试。当然,如果脚本符合您的要求,您可以删除SELECT语句中所有不必要的列。然后忘记它,这是一个很长的过程:我没有足够的声誉来评论您自己的答案,但在给出别名后,这就行了,请按UTL_操作部分添加组。好的。我将接受你的回答,因为它激励我朝着正确的方向前进。我添加了一个新的答案。很高兴你能找到答案。请记住,您可以从内部选择中删除客户机ID、项目ID、UTL\U DTSTAMP、UTL\U LATTITUDE、UTL\U经度、UTL\U事件以进行简化。
SELECT PK_USER_TIME_LOG_ID,
       USER_ID,
       UTL_ACTION,
       SUM(UTL_DURATION) AS DURATION_TOTAL       
  FROM (

SELECT A.PK_USER_TIME_LOG_ID,
       A.CLIENT_ID,
       A.PROJECT_ID,
       A.USER_ID,
       A.UTL_DTSTAMP,
       /* DATE_FORMAT(A.UTL_DTSTAMP,'%H:%i:%s') AS UTL_DTSTAMP, */
       A.UTL_LATITUDE,
       A.UTL_LONGITUDE,
       A.UTL_EVENT,
       A.UTL_ACTION,
       /* DURATION in seconds  */
       TIMESTAMPDIFF(SECOND, A.UTL_DTSTAMP, B.UTL_DTSTAMP) AS UTL_DURATION
FROM   tbl_user_time_log A
       INNER JOIN tbl_user_time_log B
               ON B.PK_USER_TIME_LOG_ID = ( A.PK_USER_TIME_LOG_ID + 1 )
WHERE  A.USER_ID = '465605'
       /* Between current pay period Start date and Current pay period end date */
       /* First day of the week is Monday.*/
       AND ( A.UTL_DTSTAMP BETWEEN '2018-01-22' AND '2018-01-28' )
       /* Filter out Clock Out. */
       AND A.UTL_EVENT <> 'CLOCK OUT'

ORDER  BY A.PK_USER_TIME_LOG_ID ASC

) AS DERIVED_TABLE_1

GROUP BY UTL_ACTION;