计算rails activerecord select语句中两个日期之间的差异

时间:2014-07-04 13:56:39

标签: ruby-on-rails postgresql

我有一个展示位置模型,其中包含check_in和check_out日期列,以及整数字段'places'。我正在尝试编写一个查询(postgres)来计算用户的“人 - 夜”总数。用户在列表中有多个展示位置,因此对于每个展示位置,我需要找到check_out和check_in日期之间的差异,并将其乘以该展示位置中的展示位置数。理想情况下,我可以在一个查询中执行此操作,类似于以下逻辑:

  hosted_personnights_count = current_user.hosted_placements
    .select("SUM((placements.check_out - placements.check_in)*placements.people) as datediff")
    .where("placements.confirmed_at IS NOT NULL and placements.check_out < ?", Date.today)
    .group(:user_id)

显然这不是正确的语法,但我认为解释这种方式比尝试列出我尝试过的所有不起作用的postgres函数更容易。有任何想法吗?展示位置表格如下所示:

    create_table "placements", force: true do |t|
     t.integer  "user_id"
     t.integer  "listing_id"
     t.date     "check_in"
     t.date     "check_out"
     t.integer  "people"
     t.datetime "confirmed_at"
     t.datetime "created_at",         null: false
     t.datetime "updated_at",         null: false
    end

1 个答案:

答案 0 :(得分:0)

您的查询很简单

SELECT SUM((check_out - check_in) * people) AS all
  FROM placements
 WHERE confirmed_at IS NOT NULL
   AND check_out < ?
   AND user_id = ?

如果您想要将全部加起来,那么您不需要GROUP BY条款。

并确保您不会意外地选择其他列(all之后)。