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