MySQL 不要连表SQL自动生成最近一个月的日期

MySQL 不要连表SQL自动生成最近一个月的日期

需求

按照时间来查找数据时候如果表里面没有某天数据那么那天就为null或者为0,但是是有时间这个字段存在的。列入如: 要查询8月20到9月20号的每一天出售的商品总数,但是9月10这天没有出售出一件商品。其余时间段都有出售东西,那么 9月10这天出售货物总件数为0.
解决方案: (我注重讲解第三种方案)

方案一(不推荐):
直接根据数据库按里面的时间字段分组来查询,查出来的只有有数据的日期,再去后台进行一 一对比最近一个月的日期,如果没有该日期就该日期的值为0即可 。

方案二:
连接一个表里面保证数据行数一定大于一个月的数据就行。再来直接对数据执行自增编序号和日期即可.

方案三:
原理和方案二差不多,但是优势是可以防止自增序号小于要产生的日期天数。

//MySQL  
SET @days = TIMESTAMPDIFF( DAY, DATE_ADD( CURDATE(), INTERVAL - 1 MONTH ), CURDATE() )+0;  #表示最近一个月  @days值可以自己定义
SET @number = 1;    
SELECT
	t.datameth AS 'datameths'
FROM
	(
	SELECT
		 @number := @number - 1 AS 'numberbvalue',
		ADDDATE( CURDATE(),  @number )  AS 'datameth'
	FROM
		(
		SELECT
			a 
		FROM
			( SELECT '1' AS a UNION SELECT '2' UNION SELECT '3' UNION SELECT '4' UNION SELECT '5' UNION SELECT '6' ) AS a
			JOIN ( SELECT '1' UNION SELECT '2' UNION SELECT '3' UNION SELECT '4' UNION SELECT '5' UNION SELECT '6' ) AS b ON 1  #里面会自动生成36条数据,也就是类似于一个表。
		) e 
	   WHERE  @number < @days ) t    #  使用到mybatis里面 ‘<’ 要进行转义 &lt;  
	WHERE numberbvalue > 0- @days   #   ‘>’  要进行转义 &gt;
	#如果要查询时候可以使用左连接。

结果

在这里插入图片描述在这里插入图片描述

注意

mybatis可能报SQL错
你会发现在MySQL里面可以运行好好的SQL但是一粘贴到mybatis里面就会报错并且运行不了。
原因如下:
你可能没有对特殊字符进行转义.

启动项目时候可能报错
原因是这条SQL语句是多行SQL组成而来的,故此连接数据库时候要默认可以多行SQL一起执行。

解决
在连接数据库的url后面加上 &allowMultiQueries=true 即可。

第一次写,如果有错误请告知,希望各位大佬前来指正,谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值