需求
按照时间来查找数据时候如果表里面没有某天数据那么那天就为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里面 ‘<’ 要进行转义 <
WHERE numberbvalue > 0- @days # ‘>’ 要进行转义 >
#如果要查询时候可以使用左连接。
结果
注意
mybatis可能报SQL错
你会发现在MySQL里面可以运行好好的SQL但是一粘贴到mybatis里面就会报错并且运行不了。
原因如下:
你可能没有对特殊字符进行转义.
启动项目时候可能报错
原因是这条SQL语句是多行SQL组成而来的,故此连接数据库时候要默认可以多行SQL一起执行。
解决
在连接数据库的url后面加上 &allowMultiQueries=true 即可。
第一次写,如果有错误请告知,希望各位大佬前来指正,谢谢。