我有下面的数据集。下面是1993年的记录。这个 Tgrowth
列为 start - end
. Started
是在特定月份加入的员工人数,以及 ended
是当月离职的员工人数。
SELECT
r.Tgrowth,
CASE
WHEN t.mon_num = 1 THEN 'JAN'
WHEN t.mon_num = 2 THEN 'FEB'
WHEN t.mon_num = 3 THEN 'MAR'
WHEN t.mon_num = 4 THEN 'APR'
WHEN t.mon_num = 5 THEN 'MAY'
WHEN t.mon_num = 6 THEN 'JUN'
WHEN t.mon_num = 7 THEN 'JUL'
WHEN t.mon_num = 8 THEN 'AUG'
WHEN t.mon_num = 9 THEN 'SEP'
WHEN t.mon_num = 10 THEN 'OCT'
WHEN t.mon_num = 11 THEN 'NOV'
WHEN t.mon_num = 12 THEN 'DEC'
END AS myMONTH
FROM
(SELECT 1 mon_num UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10 UNION SELECT 11 UNION SELECT 12) t
LEFT JOIN Reports r ON t.mon_num = r.theMONTH
AND r.Tyear = 1993
GROUP BY r.Tgrowth , myMONTH
ORDER BY t.mon_num ASC
上述结果集如下:,
Tgrowth Month
1 JAN
0 FEB
2 MAR
0 APR
0 MAY
0 JUN
0 JUL
0 AUG
0 SEP
0 OCT
0 NOV
0 DEC
相反,我希望结果显示一个滚动总和,即添加到 Tgrowth
现场。像下面这样,
growth Emp_Count myMONTH
1 1 JAN
0 1 FEB
2 3 MAR
0 3 APR
0 3 MAY
0 3 JUN
0 3 JUL
0 3 AUG
0 3 SEP
0 3 OCT
0 3 NOV
0 3 DEC
2条答案
按热度按时间hgb9j2n61#
有两种选择:
使用联接
使用变量
使用join的方法如下:
使用变量解决方案如下:
rqcrx0a62#
因为您运行的是mysql 8.0,所以我建议使用递归查询来生成日期,然后使用窗口函数和聚合。
如果你想要整个1993年:
这是假设
theDate
存储为date
数据类型而不是字符串(否则,您需要首先使用str_to_date()
).这还考虑到表可能包含给定月份的多行。如果不是这样,那么就不需要聚合: