2014-03-27 81 views
1

我有以下SQL:SQL語句沒有給最後三天

SELECT 
    DATE(`date`), SUM(`total`) 
FROM 
    `order` 
WHERE 
    `status` = '3' 
     AND `date` > DATE(CURDATE() - INTERVAL 30 DAY) 
GROUP BY DAY(`date`) 
ORDER BY `date` DESC; 

今天是2014年3月27日。但是,當我從這個查詢結果的var_dump,我得到以下(編輯了下來,以節省空間,數字編輯了)

array(28) { 
    [0]=> 
    array(2) { 
    ["DATE(`date`)"]=> 
    string(10) "2014-03-24" 
    ["SUM(`total`)"]=> 
    string(17) "xxx" 
    } 
    [1]=> 
    array(2) { 
    ["DATE(`date`)"]=> 
    string(10) "2014-03-23" 
    ["SUM(`total`)"]=> 
    string(6) "xxx" 

..和它完成了2014年2月25日。過去三天肯定有記錄,我可以在桌面上看到它們。當我運行SELECT CURDATE();時,我獲得2014-03-27。爲什麼最近三天沒有看到我?

回答

3

你正在做

GROUP BY DAY(`date`) 

,而應該是

GROUP BY DATE(`date`) 

DAY()返回月份的一天日期,從1到31,所以有可能是不同月份相同的值。

+0

修復了它。但你能向我解釋爲什麼會發生這種情況嗎? – Chud37

+0

@ Chud37添加了解釋。 – xdazz

+0

非常感謝:) – Chud37

0

只要使用代碼..它下面會顯示最近三天的記錄

SELECT 
    DATE(`date`), SUM(`total`) 
FROM 
    `order` 
WHERE 
    `status` = '3' 
     AND **DATEDIFF**(DAY, date,GETDATE()) <= 3 

ORDER BY `date` DESC; 

DATEDIFF函數將返回基於日期部分亮了兩整天的差異。這裏我們使用DAY作爲datepart