MySQL选择过去30天没有选择今天的结果

时间:2016-07-26 13:50:28

标签: mysql

我希望我的问题有一个非常愚蠢的解决方案,但我被困住了。

我有这个查询来获取按日期分组的过去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_date格式为DATETIME
  • 我已经检查过,数据库中有今天订单的订单。
  • 我尝试使用CURDATE()更改NOW,或使用BETWEEN但未成功。

2 个答案:

答案 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)

试试这个。

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);

希望这有帮助。