数据表:user
人员id(id ) 转正日期(rdate) 离职日期(ddate) 入职日期(jdate)
1 2018-01-09 2018-01-01
2 2018-02-02 2018-09-08 2018-01-09
...........
大致就是这个样子要求结果,如果这个一天某一个数据不存在写为0
日期 入职人数 离职人数 转正人数
2018-01-01 2 3 0
2018-01-02 2 5 0
2018-01-03 0 0 0
2018-01-03 2 0 0
......
2018-01-30
求大神帮忙
单独对每一列都进行分组计数,再把三个结果给拼接起来
这个很简单,按照日期分组就行了,然后计算的话直接用函数,你分组后会自动计算该组的数据,如果涉及到连表的话,记得在计算的函数中加上distinct不然的话会重复计算
1.首先可以通过存储过程建一个中间表(如:date表,字段名为:dt)来存储一段时间的每一天的日期数据
2.通过连接查询将转正、离职、入职通过日期连接起来
假设date表已建好,且数据以存储
具体代码:
SELECT t1.dt,IFNULL(t2.ct,0),IFNULL(t3.ct,0),IFNULL(t4.ct,0) from date t1
LEFT JOIN
(
SELECT rdate,COUNT(*) AS ct FROM USER GROUP BY 1
) t2
ON
t1.dt=t2.rdate
LEFT JOIN
(
SELECT ddate,COUNT(*) AS ct FROM USER GROUP BY 1
) t3
ON
t1.dt=t3.ddate
LEFT JOIN
(
SELECT jdate,COUNT(*) AS ct FROM USER GROUP BY 1
) t4
ON
t1.dt=t4.jdate
;