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

因为数据库存着断断续续的数据,但是老大要我返回每天的数据,没有就补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操作,这里就显示了按指定天数查的,要按月的可以自己尝试一下噢,不会可以问小编。

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值