mysql按照月份统计查询

本文介绍了如何使用MySQL进行按月份统计查询,包括列出特定日期范围内的所有月份,并提供了通用的SQL语句示例,适用于灵活地查询不同月数的数据。同时提到了在需要统计某个日期前数据的情况,可以将查询结果作为主表进行左连接查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目标:列出指定日期之间的所有月份。例如:SQL语句列出2019-01-28到2019-12-28 之间的月份

结果如下:

SQL语句:

SELECT DATE_FORMAT( @cdate := DATE_ADD( @cdate, INTERVAL + 1 MONTH ), '%Y-%m' ) AS month_list 
FROM ( SELECT @cdate := DATE_ADD( '2019-12-28', INTERVAL - 12 MONTH ) FROM `tb_user` LIMIT 12 ) t0 
WHERE DATE( @cdate ) <= DATE_ADD( '2019-12-28', INTERVAL - 1 DAY ) 

开发时若要求列出6个月、7个月的数据,就需要将上面的SQL改一下了。写个比较通用的:

 SELECT DATE_FORMAT( @cdate := DATE_ADD( @cdate, INTERVAL + 1 MONTH ), '%Y-%m' ) AS month_list 
FROM ( SELECT @cdate := DATE_ADD( dateStr, INTERVAL - showMonth MONTH ) FROM table_name LIMIT showCount ) t0 
WHERE DATE( @cdate ) <= DATE_ADD( dateStr, INTERVAL - 1 DAY ) 

[注]

dateStr:查询的截止日期,yyyy-MM-dd
showMonth:查询记录数,也就是要显示几个月的记录
showCount:列表数据显示的最大记录数。
table_name :表名。这里特别要注意,表名可以是数据库中任意表,但是表中记录数必须要大于你要查询的月数的值,否则可能会出现查询记录与实际查询记录数不匹配的问题。
  例如user表中有5条记录,但是我要列出12个月的记录来,则查询结果只会最多显示5条记录。

以上仅仅是用sql列出月份,若给出一个需求,需要统计某个日期前的数据,那么就需要将上面sql查询结果作为一个表,用左连接进行查询,注意,查询出的日期结果作为主表。
例:
表:

id      money   create_date
1       10000    2019-10-28
SELECT  tb_cmonth.*, 
SUM(money)
FROM 
(
SELECT DATE_FORMAT( @cdate := DATE_ADD( @cdate, INTERVAL + 1 MONTH ), '%Y-%m' ) AS month_list 
FROM ( SELECT @cdate := DATE_ADD( '2019-12-28', INTERVAL - 12 MONTH ) FROM `tb_user` LIMIT 12 ) t0 
WHERE DATE( @cdate ) <= DATE_ADD( '2019-12-28', INTERVAL - 1 DAY ) 
) tb_cmonth
LEFT JOIN 
`tb_money` ti
ON DATE_FORMAT(ti.CREATE_DATE, '%Y-%m')= tb_cmonth.cmonth
GROUP BY tb_cmonth.cmonth

参考文章:https://blog.youkuaiyun.com/u014418725/article/details/80924290
https://blog.youkuaiyun.com/tojohnonly/article/details/70056905

如有问题欢迎留言讨论^_^

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值