最近 x 个月的排名查询
Posted
技术标签:
【中文标题】最近 x 个月的排名查询【英文标题】:Ranking query from the last x months 【发布时间】:2017-04-20 21:49:23 【问题描述】:我想从我的 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”。
上面的查询什么也没返回,我不知道错误在哪里。
【问题讨论】:
end_date 是什么数据类型? 尝试在您的查询“end_date >= dateadd(month, -2, getdate())”中使用它。让我知道它是否有效 @McNets,这只是一个例子,哈哈。实际的查询要大得多,也更复杂一些,所以我对其进行了简化以涵盖“错误”,我必须承认我在发明列名方面很糟糕:/ 【参考方案1】:试试这个:
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 日)【讨论】:
是的,就是这样!非常感谢。【参考方案2】:尝试不将其转换为字符串,并且 BETWEEN 首先需要最小日期。
SELECT id
FROM ranking
WHERE end_date BETWEEN LAST_DAY(CAST(NOW() as date) - INTERVAL 2 MONTH
AND CAST(NOW() as date)
【讨论】:
如果我想获取 2 个月到现在的记录,那将是可行的,但是正如我所说,无论如何我只想获取过去几个月的记录,谢谢您的帮助以上是关于最近 x 个月的排名查询的主要内容,如果未能解决你的问题,请参考以下文章