You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL查询优化:合并同日期同员工记录并汇总工时(近7天区间)

优化后的MySQL查询方案

我来帮你搞定这个查询的两个核心需求——合并重复记录并汇总工时,同时修正日期查询范围,直接上调整后的SQL代码:

SELECT 
    s.id, 
    s.staff_name, 
    pw.added_by as staff_id, 
    pw.date, 
    SUM(pw.hours) as total_hours,
    MAX(pw.id) as worklog_id
FROM staffs as s 
LEFT JOIN project_worklogs pw ON pw.added_by = s.id 
WHERE pw.date BETWEEN CURDATE() - INTERVAL 7 DAY AND CURDATE()
GROUP BY s.id, s.staff_name, pw.added_by, pw.date
-- 可选:如果不需要显示无工时记录的员工,取消下面一行的注释
-- HAVING total_hours IS NOT NULL

关键修改点拆解:

  • 合并重复记录与汇总工时:
    用SUM(pw.hours)计算同一员工(staff_id)同一天(date)的总工时,配合GROUP BY子句按员工ID、姓名、日期分组,确保每个员工每天仅返回一条记录。如果需要保留某一条具体的worklog_id,用MAX(pw.id)或MIN(pw.id)选取即可,按需调整。
  • 修正日期查询范围:
    把原语句中“日期晚于7天前”的逻辑,改成BETWEEN CURDATE() - INTERVAL 7 DAY AND CURDATE(),这样精准覆盖近7天的完整区间(包含7天前当天和今天)。同时直接用日期类型比较,比转成字符串更高效,也避免了格式不匹配导致的查询错误。
  • 可选的空记录过滤:
    如果不需要显示没有工时记录的员工,可以取消HAVING total_hours IS NOT NULL的注释,或者直接把LEFT JOIN改成INNER JOIN,这样只会返回有对应工时数据的员工。

内容的提问来源于stack exchange,提问作者Nisar Khalid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:41:00