我一直負責將Rails應用程序從MySQL轉換爲Postgres,並遇到小問題。
活動記錄查詢:DISTINCT ON查詢w/ORDER BY列的最大值
current_user.profile_visits.limit(6).order("created_at DESC").where("created_at > ? AND visitor_id <> ?", 2.months.ago, current_user.id).distinct
主要生產的SQL:
SELECT visitor_id, MAX(created_at) as created_at, distinct on (visitor_id) *
FROM "profile_visits"
WHERE "profile_visits"."social_user_id" = 21
AND (created_at > '2015-02-01 17:17:01.826897' AND visitor_id <> 21)
ORDER BY created_at DESC, id DESC
LIMIT 6
使用MySQL時,我非常有信心,但我誠實新的Postgres。我認爲這個查詢失敗的原因有很多。
- 我認爲需要首先區分。
- 我不知道如何按最大功能的結果排序
- 我可以使用像這樣的最大功能嗎?
此查詢的高級別目標是返回用戶的最近6個配置文件視圖。任何指針如何解決這個ActiveRecord查詢(或它的結果SQL)將不勝感激。
有問題的查詢將不會使用MySQL。 'distinct on'是一個Postgres構造,所以我假設整個事物都是Postgres兼容的。但是,使用'max()'是非常可疑的。 – 2015-04-01 16:38:51
一如既往,您的Postgres版本和表格定義應該在問題中。此外,查詢應該做什麼的描述可能不完整。 – 2015-04-02 20:44:41