mysql查询指定时间日期内数据,没有数据补0 您所在的位置:网站首页 sql分组不存在的设为0 mysql查询指定时间日期内数据,没有数据补0

mysql查询指定时间日期内数据,没有数据补0

2023-09-12 01:28| 来源: 网络整理| 查看: 265

因为数据库存着断断续续的数据,但是老大要我返回每天的数据,没有就补0,不怎么想在后台写逻辑操作了,于是想了一下在sql语句上优化,查询了部分资料总算写出来了。

SELECT `type`, success_count, success_amount_total, DATE_FORMAT(DATE_ADD(create_time, INTERVAL -1 DAY),'%Y-%m-%d') AS data_time FROM `t_request_transfer_total` WHERE`type` = 2002 AND DATE_FORMAT(DATE_ADD(create_time, INTERVAL -1 DAY),'%Y-%m-%d') BETWEEN '2020-06-01' AND '2020-06-29' ORDER BY create_time

这里可以看见中间缺少06-07的数据

SELECT @cdate := DATE_ADD(@cdate,INTERVAL - 1 DAY) `date` FROM (SELECT @cdate :=DATE_ADD('2020-06-29', INTERVAL + 1 DAY) FROM t_request_transfer_total) t1 WHERE @cdate > '2020-06-01'

通过上面执行sql可以列出 2020-06-01 -—— 2020-06-29的时间

SELECT IFNULL(`type`, 2002) AS `type`, IFNULL(success_count,0) AS success_count, IFNULL(success_amount_total,0) AS success_amount_total, `date`AS data_time FROM ( SELECT `type`, success_count, success_amount_total, DATE_FORMAT(DATE_ADD(create_time, INTERVAL -1 DAY),'%Y-%m-%d') AS data_time FROM t_request_transfer_total WHERE`type` = 2002 AND DATE_FORMAT(DATE_ADD(create_time, INTERVAL -1 DAY),'%Y-%m-%d') BETWEEN '2020-06-01' AND '2020-06-29' ) table1 RIGHT JOIN ( SELECT @cdate := DATE_ADD(@cdate,INTERVAL - 1 DAY) `date` FROM (SELECT @cdate :=DATE_ADD('2020-06-29', INTERVAL + 1 DAY) FROM t_request_transfer_total) t1 WHERE @cdate > '2020-06-01' ) table2 ON data_time =`date` ORDER BY `date`

    将上面两个语句通过右连接联合查询结果集就可以得出来数据结合了,通过ifnull判断是否为空进行补0操作,看上图06-07的数据已经进行了补0操作,这里就显示了按指定天数查的,要按月的可以自己尝试一下噢,不会可以问小编。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有