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