我有一个表订单,我想提出一个请求,以检索从去年月份到现在的同一个月的所有订单。例如:我们在11月,我想恢复2017年11月的所有订单。
我尝试了类似的方法,但是它不起作用:
SELECT COUNT(*)
FROM ps_orders o
WHERE YEAR(o.date_add) = YEAR(NOW() - INTERVAL 1 YEAR)
AND MONTH(o.date_add) = MONTH(NOW() - INTERVAL 1 MONTH)
谢谢您的帮助
答案 0 :(得分:1)
您不需要减去月份。要获得上一年的同月结果,应该是MONTH(NOW())
。
SELECT COUNT(*)
FROM ps_orders o
WHERE YEAR(o.date_add) = YEAR(NOW() - INTERVAL 1 YEAR)
AND MONTH(o.date_add) = MONTH(NOW()) -- same as current month
答案 1 :(得分:1)
我建议您在日期范围内执行此操作:
SELECT COUNT(*)
FROM ps_orders o
WHERE o.date_add >= (curdate() - interval (day - 1) day) - interval 12 month AND
o.date_add >= (curdate() - interval (day - 1) day) - interval 11 month ;
使用YEAR()
和MONTH()
之类的功能时,优化器将无法充分利用date_add
上的可用索引。但是,此版本可以使用适当的索引。