2

如何在 postgreSQL 中获取上个月的记录?请帮忙。

很可能我该如何为此编写 psql 查询?

注意:我的created_at表中有一个字段。

4

4 回答 4

7

您可以将模型中的范围定义为:

scope :in_last_month, where('created_at BETWEEN ? AND ? ', 1.month.ago.beginning_of_month , 1.month.ago.end_of_month)

或者

scope :in_last_month, where(:created_at => 1.month.ago.beginning_of_month..1.month.ago.end_of_month)

然后调用:

 Model.in_last_month

同样,您可能有当月、上个月之前的范围等。

于 2013-08-13T14:34:26.680 回答
3

假设你有User模型然后

  date = Date.today >> -1
  User.where("DATE_FORMAT('created_at', '%Y-%m') = ?" date.strftime("%Y-%m"))

对于 postgres

  User.where("TO_CHAR('created_at', '%YYYY-%MM') = ?" date.strftime("%Y-%m"))
于 2013-08-13T14:30:27.857 回答
2

您应该能够传递一个范围:

User.where(created_at: Time.now..1.month.ago)

您可以将其添加到类方法中:

def self.created_in_last_month
  where(created_at: Time.now..1.month.ago)
end
于 2013-08-13T16:53:34.307 回答
2

这也可以帮助..

scope :in_last_month, where('created_at BETWEEN ? AND ? ', 1.month.ago.beginning_of_month.strftime('%Y-%m-%d'), 1.month.ago.end_of_month.strftime('%Y-%m-%d'))

当我找到正确的查询时,它会生成created_at BETWEEN '2013-07-01' AND '2013-07-31'

于 2013-08-14T06:40:21.963 回答