如何在postgreSQL中获取上个月的记录

时间:2013-08-13 14:24:21

标签: ruby-on-rails postgresql

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

我最有可能为此编写psql查询?

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

4 个答案:

答案 0 :(得分: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

类似地,您可能拥有当月,上个月之前的范围等。

答案 1 :(得分: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"))

答案 2 :(得分: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

答案 3 :(得分: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'