复杂的MySQL选择、分组、求和。
我有以下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
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;