mysql 根据起止年份查询起止年的趋势(每一年之前所有的数据)

解释:比如选择了开始时间为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 

大概效果

如有疏漏,请指正!谢谢

猜你喜欢

转载自www.cnblogs.com/w-yu-chen/p/10278952.html