Mysql查詢某個月的每一天的數據


需求:查詢最近三個月的每一天的業績總和

因為最近三個月每個月的天數是不一樣,所以不能用這篇文章:Mysql查詢最近30天的數據(每天的業績總和數據) 介紹的用固定多少天去查數據。需要一個新方法。


一、生成每個月的每一天的時間序列

SELECT ADDDATE(y.first, x.d - 1) as d FROM (SELECT 1 AS d UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12 UNION ALL SELECT 13 UNION ALL SELECT 14 UNION ALL SELECT 15 UNION ALL SELECT 16 UNION ALL SELECT 17 UNION ALL SELECT 18 UNION ALL SELECT 19 UNION ALL SELECT 20 UNION ALL SELECT 21 UNION ALL SELECT 22 UNION ALL SELECT 23 UNION ALL SELECT 24 UNION ALL SELECT 25 UNION ALL SELECT 26 UNION ALL SELECT 27 UNION ALL SELECT 28 UNION ALL SELECT 29 UNION ALL SELECT 30 UNION ALL SELECT 31) x, (SELECT CONCAT('2017-09','-01') as FIRST, DAY(LAST_DAY(str_to_date('2017-09','%Y-%m'))) AS last) y WHERE x.d <= y.last
   
   
   
           

結果:

結果


二、用上面的時間序列與目標結果集做左連接

SELECT DATE_FORMAT(lefttable.date,'%Y-%c') as yearMonth,lefttable.date,IFNULL(righttable.m,'0') as money FROM (SELECT ADDDATE(y.first, x.d - 1) as date FROM (SELECT 1 AS d UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12 UNION ALL SELECT 13 UNION ALL SELECT 14 UNION ALL SELECT 15 UNION ALL SELECT 16 UNION ALL SELECT 17 UNION ALL SELECT 18 UNION ALL SELECT 19 UNION ALL SELECT 20 UNION ALL SELECT 21 UNION ALL SELECT 22 UNION ALL SELECT 23 UNION ALL SELECT 24 UNION ALL SELECT 25 UNION ALL SELECT 26 UNION ALL SELECT 27 UNION ALL SELECT 28 UNION ALL SELECT 29 UNION ALL SELECT 30 UNION ALL SELECT 31) x, (SELECT CONCAT('2017-8','-01') as FIRST, DAY(LAST_DAY(str_to_date('2017-8','%Y-%c'))) AS last) y WHERE x.d <= y.last and ADDDATE(y.first, x.d - 1)<=CURDATE()) as lefttable LEFT JOIN (SELECT truncate(sum(af2.money),2) as m,DATE_FORMAT(af2.create_date,'%Y-%c-%d') as gptime from financial_flow af2,vip_student vs1 where af2.ACCOUNT_NO IN ('XFSR','XFBK') and DATE_FORMAT(af2.create_date,'%Y-%c')='2017-8' and af2.stu_id=vs1.id and vs1.subject_name='JAVA' GROUP BY gptime) as righttable ON DATE_FORMAT(lefttable.date,'%Y-%c-%d')=righttable.gptime
   
   
   
           

結果:

結果

達到需求目標。

原文地址:https://blog.csdn.net/Axela30W/article/details/77839279


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM