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操作,这里就显示了按指定天数查的,要按月的可以自己尝试一下噢,不会可以问小编。

google-site-verification: google5a28e83e28095f69.html

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章