我希望我的问题有一个非常愚蠢的解决方案,但我被困住了。
我有这个查询来获取按日期分组的过去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
但未成功。答案 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);
希望这有帮助。