如何在MySQL登录时长统计查询中关联tbl_user获取用户名
解决方案:关联用户表获取姓名信息
要在现有登录时长统计查询中同时展示用户的名字和姓氏,只需要将统计结果与tbl_user表做关联即可,下面是修改后的完整查询语句:
SELECT tu.USER_ID, tu.FIRST_NAME, -- 替换为tbl_user中存储名字的实际字段名 tu.LAST_NAME, -- 替换为tbl_user中存储姓氏的实际字段名 td1.UTL_TASK, SUM(td1.UTL_DURATION) AS UTL_DURATION_TOTAL FROM ( SELECT A.PK_USER_TIME_LOG_ID, A.CLIENT_ID, A.PROJECT_ID, A.USER_ID, A.UTL_DTSTAMP, A.UTL_LATITUDE, A.UTL_LONGITUDE, A.UTL_EVENT, A.UTL_TASK, 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 = '465615' AND A.UTL_DTSTAMP BETWEEN '2019-02-24' AND '2019-03-04' AND A.UTL_EVENT <> 'CLOCK OUT' ) AS td1 INNER JOIN tbl_user tu ON td1.USER_ID = tu.USER_ID -- 关联用户表,确保字段名匹配 GROUP BY tu.USER_ID, tu.FIRST_NAME, tu.LAST_NAME, td1.UTL_TASK;
关键修改说明:
- 关联用户表:在外层查询中通过
INNER JOIN关联tbl_user(这里用别名tu简化代码),关联条件是两个表的用户ID字段一致(如果你的tbl_user表中用户ID字段名不是USER_ID,比如是PK_USER_ID,需要把tu.USER_ID改成对应字段)。 - 添加姓名字段:在
SELECT列表中加入用户的名字和姓氏字段,记得替换成你实际表中对应的字段名(比如有的表可能用USER_FIRST_NAME或FNAME)。 - 更新分组规则:根据SQL的分组要求(尤其是开启
ONLY_FULL_GROUP_BY模式时),需要把新增的姓名字段也加入到GROUP BY子句中,避免语法错误。
如果需要同时统计多个用户的登录时长,只需要去掉WHERE子句中的A.USER_ID = '465615'条件即可,查询会自动关联每个用户的姓名信息。
内容的提问来源于stack exchange,提问作者suchislife801
相关产品推荐
相关产品推荐

