2013-07-27 138 views
1

我有查詢從過去的7天獲取記錄

SELECT 
    IFNULL(SUM(a.x), 0) AS x, 
    IFNULL(COUNT(*), 0) AS num 
FROM a AS a 
WHERE (a.`time` >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)) 
GROUP BY DAY(a.time) 

它的確定問題,但是當確切日子,有這樣的沒有記錄不歸路這一天。我需要返回0. 如何做到這一點?

+0

你想讓mysql做東西並在沒有時重新運行數據? – 2013-07-27 10:34:20

+1

如果當天沒有記錄,那麼數據庫將不會返回當天的記錄,這非常簡單。您在處理數據或顯示數據時需要處理此要求。 – DevZer0

+0

這個鏈接可以幫助你 [擺脫過去7天的記錄] [1] [1]:http://stackoverflow.com/questions/10804563/return-records-for-last-n -n-every-day-in-n-have-a-record – krishna

回答

5
SELECT 
    COALESCE(SUM(a.x), 0) AS x, 
    COALESCE(COUNT(*), 0) AS num 
FROM a AS a 
WHERE (a.`time` >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)) 
GROUP BY DAY(a.time) 

COALESCE - 在列表

返回第一個非空值,但是,我想你應該處理,以便處理由@ DevZer0建議的數據這一點。

+1

該方法返回,就像OP的方法在當天沒有記錄時不返回0 –