ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

SQL查询最近12个月的数据量 没有补0

2021-01-21 14:35:32  阅读:677  来源: 互联网

标签:-% 12 FORMAT DATE 数据量 SQL date ticket SELECT


需求:查询最近12个月的数据量,此处表的名称为:ticket_ticket

按月查询数据,sql语句如下:

SELECT COUNT(*) as num, DATE_FORMAT(create_at,'%Y-%m') as t
FROM ticket_ticket WHERE flow_id=336 GROUP BY DATE_FORMAT(create_at,'%Y-%m')

查询结果:

可以看出只有两个月份,不满足需求。

解决方案如下:

步骤一:生成一个月份表,包含最近的12个月

sql如下:

SELECT
	DATE_FORMAT(@cdate := date_add( @cdate, INTERVAL - 1 MONTH ),'%Y-%m') as date
FROM
	( 
	SELECT @cdate := date_add(CURDATE(), INTERVAL 1 MONTH )
	FROM ticket_ticket LIMIT 12)d
	ORDER BY date

结果如下:

步骤二:将查询结果表并入月份表

sql语句:

SELECT * FROM (
SELECT
	DATE_FORMAT(@cdate := date_add( @cdate, INTERVAL - 1 MONTH ),'%Y-%m') as date
FROM
	( 
	SELECT @cdate := date_add(CURDATE(), INTERVAL 1 MONTH )
	FROM ticket_ticket LIMIT 12)d
	ORDER BY date
)date_c LEFT JOIN (
SELECT COUNT(*) as num, DATE_FORMAT(create_at,'%Y-%m') as t
FROM ticket_ticket WHERE flow_id=336 GROUP BY DATE_FORMAT(create_at,'%Y-%m')
)tab ON t=date

结果如下:

步骤三:处理查询结果:NULL设置为0,并按照月份排序

sql语句:

SELECT date as 月份, IFNULL(tab.num, 0) as 数量 FROM (
SELECT
	DATE_FORMAT(@cdate := date_add( @cdate, INTERVAL - 1 MONTH ),'%Y-%m') as date
FROM
	( 
	SELECT @cdate := date_add(CURDATE(), INTERVAL 1 MONTH )
	FROM ticket_ticket LIMIT 12)d
	ORDER BY date
)date_c LEFT JOIN (
SELECT COUNT(*) as num, DATE_FORMAT(create_at,'%Y-%m') as t
FROM ticket_ticket WHERE flow_id=336 GROUP BY DATE_FORMAT(create_at,'%Y-%m')
)tab ON t=date

结果如下:

总结这里用到的sql语句

  • DATE_FORMAT(date,format)
    定义:用于以不同的格式显示日期/时间数据。即对时间进行格式转换
    用法:date 参数是合法的日期。format 规定日期/时间的输出格式。
DATE_FORMAT('2021-02-12','%Y-%m')

输出:2021-02

  • CURDATE()
    定义:返回当前日期
    用法:直接使用CURDATE()
SELECT NOW(),CURDATE(),CURTIME()

结果:

标签:-%,12,FORMAT,DATE,数据量,SQL,date,ticket,SELECT
来源: https://www.cnblogs.com/wangyingblock/p/14307839.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有