在进行数据库数据统计时,比如按天统计数据,一个月中有一些天没有数据的,数据库也就没查出来,对于后台来说这没什么。但是前端展示的时候要补全缺失的日期数据,比如2020-05-12没有数据,就添加键日期,并把值补为0。(假如后台查询的数据数据结构为List<Map<String, Object>>)。
如图,数据库查询出来的统计数据如下
我的需求是查询出近30天的所有数据,很显然,上面的数据是有缺失的,我需要把“2020-04-13”到“2020-05-12”(当前)的所有数据都列出来,没有的话就补0。
方式一:依赖数据库解决,新建一个数据表,left join 来查询,或者拼接 union。此处先不做讲解。
方式二:在程序中进行补全。
- 写一个补全日期工具类,给定指定的开始和结束日期,返回两者之间所有的日期的字符串列表
2. 得到指定日期之间的列表如下图
3. 得到指定日期之间的列表后,遍历列表,然后和数据库查询出来的数据进行比较,如果相同则添加数据库查询的Map到新的列表,不同则构造一个新的Map(key:日期,value:0),然后添加到新的列表。核心代码如下:
4.其中result为补全的最终结果,打印拼接的最终结果如下:
到此补全日期成功啦。工具类做成了指定日期之间。可以任意设置指定的日期。个人觉得这种方式比使用SQL来解决的方式要好一点。