我有一個Placements模型,它包含check_in和check_out日期列以及整數字段'places'。我正在嘗試編寫一個查詢(postgres)來計算用戶的總「人員夜」。用戶通過列表提供了多個展示位置,因此對於每個展示位置,我需要以天爲單位查找check_out和check_in日期之間的差異,並將其乘以該展示位置的數量。理想情況下,我可以在一個查詢,大意如下的邏輯線的東西做到這一點:計算rails中兩個日期之間的差異activerecord select語句
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
你能描述一下'placements'表嗎?如果'check_in'&'check_out'字段確實是'date's(而不是''timestamp's),那麼差異將產生一個整數(以天爲單位),因此您的查詢可以照原樣運行。 – pozs
是的,他們是日期,而不是日期,已添加上面的展示位置表。我會按照你的建議嘗試,手指幾乎穿過 – Dave
,只是給了我「必須出現在GROUP BY子句中或用於聚合函數」的錯誤,所以我只需要將分組正確(此錯誤讓我感到困惑)。理想情況下,它需要吐出一個值而不是一系列的展示位置。 – Dave