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

 

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