复杂的MySQL SELECT,GROUP,SUM。

时间:2018-01-27 23:40:02

标签: 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_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;

...返回以下结果:

enter image description here

问题:

我如何 GROUP BY UTL_ACTION和 SUM 的分组值?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

这是受Nicky启发的解决方案。

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;

......这就是它的样子:

sample2