排名最近x个月的查询

时间:2017-04-20 21:49:23

标签: php mysql sql ranking

我想从MySQL服务器获取最近x个月的所有记录。例如,使用2个月(不是最近2个月,比如过去60天,而是整个过去一个月等等。如果实际月份是4月,我想要从2月和3月开始的所有记录)。 我尝试了一些查询,最后一个是

SELECT id FROM ranking WHERE (end_date BETWEEN DATE_FORMAT(NOW(), '%Y-%m-01') AND DATE_FORMAT(LAST_DAY(NOW() - INTERVAL 2 MONTH), '%Y-%m-%d'))

“end_date”是我的日期列,是DATE列“2017-04-07”。

上面的查询只返回任何内容,我无法弄清楚错误在哪里。

2 个答案:

答案 0 :(得分:0)

尝试不将其转换为字符串,并且BETWEEN首先需要最小日期。

SELECT id 
FROM ranking 
WHERE end_date BETWEEN LAST_DAY(CAST(NOW() as date) - INTERVAL 2 MONTH 
               AND CAST(NOW() as date)

答案 1 :(得分:0)

试试这个:

SELECT id
FROM ranking
WHERE end_date BETWEEN
DATE_ADD(LAST_DAY(DATE_SUB(NOW(), INTERVAL 3 MONTH)) INTERVAL 1 DAY)
AND LAST_DAY(DATE_SUB(NOW(), INTERVAL 1 MONTH));

它计算日期如下:

  • 对于范围内的开始日期,它从当前日期减去3个月,获取该月的最后一天并在其中添加一天以获得下个月的第一天(在我们的案例中为2月1日)
  • 对于结束日期,它从当前日期减去一个月并获得该月的最后一天(我们的案例中为3月31日)
相关问题