MySQL检索与去年同月的去年订单

时间:2018-11-29 09:17:58

标签: mysql sql date

我有一个表订单,我想提出一个请求,以检索从去年月份到现在的同一个月的所有订单。例如:我们在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)

谢谢您的帮助

2 个答案:

答案 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上的可用索引。但是,此版本可以使用适当的索引。