我有以下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;
...返回以下结果:
问题:
我如何 GROUP BY UTL_ACTION和 SUM 的分组值?
答案 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;
......这就是它的样子: