2017-04-20 33 views
0

我想从我的MySQL服务器获取最近x个月的所有记录。以2个月为例(不是过去2个月,如过去60天,而是过去一个月等等,如果实际月份是4月份,我需要2月份和3月份的所有记录)。 我已经尝试了一些疑问,最后一个是从上个x月排名查询

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年4月7日”。

上面的查询只返回任何内容,我不知道错误在哪里。

+0

什么数据类型是end_date? – McNets

+0

在查询中尝试使用“end_date> = dateadd(month,-2,getdate())”。让我知道它是否有效 –

+0

@McNets,这只是一个例子,哈哈。实际查询更大更复杂,因此我将其简化为涵盖“错误”,并且我必须承认发明列名称时非常可怕:/ –

回答

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

如果我想从中获取记录2个月到现在,但正如我所说,我只想得到过去几个月的记录,无论如何,谢谢你帮助 –