【问题标题】:mysql: how to get data from 3 newest months in database?mysql:如何从数据库中最新的 3 个月获取数据?
【发布时间】:2013-03-28 03:49:05
【问题描述】:

我被困在 mysql 中使用命令查询最近 3 个月的行。这是一个例子:

这是数据库:

row 1 : 2012/02/10 - id : 1
row 2 : 2012/03/15 - id : 2
row 3 : 2012/05/04 - id : 3
row 4 : 2012/06/04 - id : 4

今天是:2013/03/28

我如何编写命令来获取数据库中最新 3 个月的数据行: 真正的结果是:row 2 3 4

更新-----

Table name = sa_cms_post | col date : createdAt datetime - 0000-00-00 00:00:00

【问题讨论】:

  • 你的表结构是什么?日期是实际的日期字段还是字符串?
  • @Cfreak :我更新了关于表格信息的问题。 :)
  • 为什么记录2仍在列表中?你是按月计算的吗?
  • 我需要获得最新的 3 个月,而不是最近的 3 个月。因此,在示例中,我将当前时间设为 2013 ,但如果为真,我们需要 06 05 03 月份的数据,因为这是数据库中最新的 3 个月。
  • 同月有记录吗?

标签: php mysql sql select


【解决方案1】:

试试看,

SELECT  *
FROM    sa_cms_post
WHERE   MONTH(createdAt) BETWEEN
                         MONTH(CURDATE()) AND MONTH(CURDATE() + INTERVAL 3 MONTH)

【讨论】:

  • 已测试!并做了 !。非常感谢我的朋友:)
  • 此解决方案不正确。它将在此数据上失败:SQLfiddle
  • 他想要 3 个最新的,跟过去几个月一样
  • @mvp 但仍需要当前月份。
  • @mvp 该解决方案基于给定的数据和所需的结果。
【解决方案2】:

如果我理解正确,最新的 3 个月实际上意味着从表中获取 3 个尾随月份 行,而当前日期对你来说并不重要。在这种情况下,这是可行的 (SQLFiddle demo):

SELECT *
FROM sa_cms_post
WHERE createdAt > date_sub(
    (SELECT max(createdAt) FROM sa_cms_post),
    INTERVAL 3 month
)

【讨论】:

  • 因为它从给定的数据集中获得了 3 个尾随月份(不考虑当前日期)
  • @downvoter:此答案对数据集的后 3 个月有效。如果您认为我没有正确理解问题,请说出来。
猜你喜欢
  • 2016-12-19
  • 1970-01-01
  • 1970-01-01
  • 2019-10-28
  • 2021-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-25
相关资源
最近更新 更多