【问题标题】:How to select records starting from last month to 12 months ago?如何选择从上个月开始到 12 个月前的记录?
【发布时间】:2015-07-09 13:23:19
【问题描述】:

我需要选择从上个月到 12 个月前的所有记录。所以现在是 2015-07-09 时,我需要选择 2014-08-01 和 2015-06-30 之间的记录。

【问题讨论】:

  • 调查过DATE_ADD函数?
  • 如果你要覆盖 12 个月,你可能是指 2014-07-01 到 2015-06-30 之间。

标签: mysql select


【解决方案1】:

使用这个查询:

select * from  table_name where date_column between date_sub(ADDDATE(LAST_DAY(SUBDATE(curdate(), INTERVAL 11 MONTH)), 1), interval 1 month) ,  last_day(date_sub(curdate(), interval 1 month))

【讨论】:

  • 这里的 date_column 是表中包含 date 类型的日期值的列。
  • 这将无法正常工作,因为它会从 2014-07-09 到 2015-06-09。
  • 也不起作用。通过 ADDDATE 和 SUBDATE,我认为您的意思是 date_add 和 date_sub。为什么在第一部分有两个日期减法,减去 11 个月,然后减去一个月。并且找到该月的最后一天然后添加一个月是行不通的,因为对于像 2 月这样的一个月,这会给你 3 月 28 日,这不是 3 月的最后一天。为什么不只做 13 个月前的最后一天呢?并且使用 BETWEEN 也不起作用,因为它会测试 >= 和 13 个月前一个月的最后一天,以及
  • 我在我的 mysql 版本 5.6 上检查了这一点,并且根据问题中的要求一切正常。你能试试只选择日期吗?
  • 谢谢,但我收到错误:#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'last_day(date_sub(curdate(), interval 1 month)) LIMIT 0, 25' 附近使用正确的语法
【解决方案2】:

这会让你到上个月底为止。

select ... from table where mydate < date_sub(curdate(), interval day(curdate())-1 day)

这应该为您指明学习日期数学的正确方向,这样您就可以弄清楚要做什么来测试 12 个月前的开始(提示:从我上面的表达式中减去 12 个月并测试大于或等于)。

【讨论】:

  • 不幸的是我被卡住了,因为我不太擅长 sql 查询。我可以管理一些简单的,但这对我来说太多了:) 似乎比我最初想象的要难:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-28
  • 2021-11-01
相关资源
最近更新 更多