2016-07-26 64 views
1

我希望我的問題有一個非常愚蠢的解決方案,但我卡住了。MySQL從過去30天中選擇不選擇今天的結果

我有這個查詢來獲得按日期分組的最近30天的訂單。

SELECT 
    DATE_FORMAT(order_date, '%Y-%m-%d') as day, 
    COUNT(*) AS num 
FROM 
    orders 
WHERE 
    (order_date >= CURDATE() - INTERVAL 30 DAY) 
GROUP BY 
    DAY(order_date) 

此查詢雖然只包括結果,直到昨天,不是今天的。我究竟做錯了什麼?

有用的信息:

  • order_dateDATETIME格式。
  • 我檢查過了,數據庫中有今天的日期。
  • 我試過改變CURDATE()NOW,或使用BETWEEN沒有成功。
+0

準確的輸出是什麼? –

回答

3

試試這個:

SELECT 
    DATE_FORMAT(order_date, '%Y-%m-%d') as day, 
    COUNT(*) AS num 
FROM 
    orders 
WHERE 
    (order_date >= CURDATE() - INTERVAL 30 DAY) 
GROUP BY day; 

注:在查詢你被DAY(date)分組。 Day函數返回一個月內的日數。所以,可能情況是兩個不同月份的同一天聚集在一個單一的位置。這就是爲什麼你錯過了今天的結果。

+1

不錯,這個查詢至少會解決另一個問題。 –

+0

作爲一種魅力。謝謝你的提示,真的很有幫助。在11分鐘內,我會接受你的回答(現在不會讓我) – Mumpo

+0

如果你增加間隔60天,你就會清楚地理解它。你不會在結果集中獲得超過31條記錄@Mumpo – 1000111

0

試試這個。

SELECT         
    DATE_FORMAT(order_date, '%Y-%m-%d') as day,         
    COUNT(*) AS num         
FROM         
    orders         
WHERE         
    DATE_FORMAT(order_date, '%Y-%m-%d') >= adddate(CURDATE() - INTERVAL 30 DAY)         
GROUP BY         
    DAY(order_date); 

希望這會有所幫助。