解释:比如选择了开始时间为2015年,结束时间为2020年,那么要查询 2015年之前(包括)所有的数据,2016年之前(包括)所有的数据,……,2020年之前(包括)所有的数据,
结果为一个增长趋势。
1、时间字段是datetime类型
2、需要用到中间表,表结构和数据链接下载
https://pan.baidu.com/s/1sAQ78e3Ao-KwvYJlaipbKQ
3、前两个 adddate 日需要在数据库写死 从每日的xxxx-01-01开始,-最后一个日期同理xxxx-12-31
4、sql
SELECT DATE_FORMAT(years.date, '%Y') AS years, sum( CASE WHEN ti. STATUS = '1' THEN 1 ELSE 0 END ) count FROM ( SELECT adddate('2014-01-01', numlist.id) AS 'date', numlist.id FROM ( SELECT n100.i * 365 AS id FROM num AS n100 ) AS numlist WHERE adddate('2014-01-01', numlist.id) <= '2019-12-31' ) years LEFT JOIN t_hobo_people_info ti ON YEAR (years.date) >= YEAR (ti.createdate) AND ti.ORGID LIKE CONCAT('37.02.82', '%') GROUP BY years.date
5、效果
附带:还有一种写法,这个是需要用代码循环的。
sql
selectSUM(case when year <= '2016' then count else 0 end) as '2016', SUM(case when year <= '2017' then count else 0 end) as '2017',-- 需要循环 SUM(case when year <= '2018' then count else 0 end) as '2018',-- 需要循环 SUM(case when year <= '2019' then count else 0 end) as '2019' from ( select createdate,date_format(e.createdate,'%Y') year, count(1) count from t_hobo_people_info e where createdate < '2019-12-31 23:59:59' GROUP BY year, createdate ) r
大概效果
如有疏漏,请指正!谢谢