最近 x 个月的排名查询

Ranking query from the last x months

我想从我的 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”。

上面的查询只是 returns 什么都没有,我不知道错误在哪里。

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

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

试试这个:

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