qq_34775102
木mu升
采纳率100%
2018-09-17 06:27

mysql 查询分组问题,根据年月 人员分组

40
已采纳

查询根据月和人员分组

 select e.id eid,e.name ename,c.name cname,DATE_FORMAT(s.change_time,'%Y-%m') weeks,
sum(s.intergral_num) count,t.integral from sec_employee e
LEFT JOIN sec_integral_table t on e.id=t.emp_id
LEFT JOIN sec_company c on c.id=e.company_id
LEFT JOIN sec_integral_log s on s.integral_id=t.id 
and s.change_time >='2018-07-01' and s.change_time<= '2018-08-31'
where e.id=1075 or e.id=1070
group by t.emp_id,weeks

实际结果:

图片说明

期望结果:

图片说明

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

7条回答

  • qq_34775102 木mu升 3年前

    新建了一张表,每月扫一次把上个月的数据存进去

    点赞 1 评论 复制链接分享
  • showbo GoCityPass新加坡曼谷通票 3年前

    用IFNULL格式化下weeks和count就行了。。

    select e.id eid,e.name ename,c.name cname,
    ifnull(DATE_FORMAT(s.change_time,'%Y-%m'),DATE_FORMAT(now(),'%Y-%m')) weeks,
    ifnull(sum(s.intergral_num) ,0) count,
    t.integral from sec_employee e
    LEFT JOIN sec_integral_table t on e.id=t.emp_id
    LEFT JOIN sec_company c on c.id=e.company_id
    LEFT JOIN sec_integral_log s on s.integral_id=t.id
    and s.change_time >='2018-07-01' and s.change_time<= '2018-08-31'
    where e.id=1075 or e.id=1070
    group by t.emp_id,weeks

    点赞 7 评论 复制链接分享
  • m0_37667857 m0_37667857 3年前

    (select * from
    (select id from sec_employee where id in ('1075','1070')) a
    CROSS JOIN
    (select DATE_FORMAT(s.change_time,'%Y-%m') weeks from sec_integral_log where change_time >='2018-07-01' and change_time<= '2018-08-31' group by weeks) b) cc
    left join ......
    left join ......

    点赞 评论 复制链接分享
  • m0_37667857 m0_37667857 3年前

    使用交叉连接可以实现,即将人员数据和时间数据相乘得到固定的数据记录,在左连接其数据源表即可得到你想要的结果。

    点赞 评论 复制链接分享
  • qq_34775102 木mu升 3年前

    时间筛选有问题DATE_FORMAT(s.change_time,'%Y-%m') 筛选的时候1075在sec_integral_log 表是没有数据的

    点赞 评论 复制链接分享
  • qq_34775102 木mu升 3年前

    我的意思是无论有没有数据 如果查 两个月就每人显示两个月两条数据 查三个月就每人显示三条数据

    点赞 评论 复制链接分享
  • qq_34775102 木mu升 3年前

    ifnull(sum(s.intergral_num) ,0) count, 这有用 时间那个有问题

    点赞 评论 复制链接分享

相关推荐