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


解释:比如选择了开始时间为2015年,结束时间为2020年,那么要查询   2015年之前(包括)所有的数据,2016年之前(包括)所有的数据,……,2020年之前(包括)所有的数据,

  结果为一个增长趋势。

1、时间字段是datetime类型

2、需要用到中间表,表结构和数据链接下载

链接:https://pan.baidu.com/s/1tAFU4nm1p4CkSneXwceA_A 
提取码:b3xi 

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 

大概效果

 

如有疏漏,请指正!谢谢


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM