首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在mysql查询中获取上个月(而不是持续30天)的记录

如何在mysql查询中获取上个月(而不是持续30天)的记录
EN

Stack Overflow用户
提问于 2018-01-30 19:47:29
回答 3查看 2.6K关注 0票数 2

在MySQL查询中,我需要选择上个月的记录,而不是最后30天的记录。

例如,如果当月是一月,那么我需要有上个月的记录,也就是12月,但它应该只显示2017年12月的记录,而不包括前几年。

我目前使用的SQL部件如下。

代码语言:javascript
复制
$sql .= " AND MONTH(checkup_date) = MONTH(NOW() - INTERVAL 1 MONTH)";

它还显示了数据库中所有12月的记录,即2017年12月、2016年12月等。

我甚至尝试了以下方法

代码语言:javascript
复制
$sql .= " YEAR(checkup_date) AND MONTH(checkup_date) = MONTH(NOW() - INTERVAL 1 MONTH)";

但是,只有在上个月不早于一月的情况下,它才能起作用。如果当月是二月,它就会起作用,所以上个月是一月,年份是2018年。

但就我而言,目前的月份是一月,所以上个月将是12月,但这里的年份是2018年,所以它不是也不会显示任何记录。

所以,伙计们,请帮我修复这个查询,这样我就可以得到最后一年,以防当月是一月,在另一种情况下,年份仍然是当前年份。

感谢你帮忙解决这个问题。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-01-30 19:53:40

这是在mysql中获取属于上个月的表中所有行的查询:

代码语言:javascript
复制
SELECT * FROM table
WHERE YEAR(date_created) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH)
AND MONTH(date_created) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)

另一种选择是:

代码语言:javascript
复制
SELECT * FROM table
WHERE EXTRACT(YEAR_MONTH FROM date_created) = EXTRACT(YEAR_MONTH FROM CURDATE() - INTERVAL
1 MONTH)
票数 2
EN

Stack Overflow用户

发布于 2018-01-30 19:53:28

你可以简单地做:

代码语言:javascript
复制
where checkup_date < curdate() - interval (1 - day(curdate())) day and
      checkup_date >= (curdate() - interval (1 - day(curdate())) day) - interval 1 month

通过在checkup_date上不使用函数,那么方法就可以利用h作为该列的适当索引。

票数 2
EN

Stack Overflow用户

发布于 2018-01-30 19:52:47

得到上个月的

代码语言:javascript
复制
select DATE_ADD("2018-01-10", INTERVAL -1 MONTH)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48529414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档