的PostgreSQL無法弄清楚如何通過你的created_at
訂購。
假設你發現2組(:sender_id, :receiver_id)
,例如[1, 2]
和
[1, 3]
。
現在假設在第一組中有兩條消息,一條是從1天前發出的,另一條是從1分鐘前發出的。假設你在12小時前的第二組中有1條消息。
然後ORDER BY created_at DESC
沒有任何意義:你是否從1天前將消息作爲第一組的created_at
(因此第一組出現在第二組之後),或者是1分鐘前的消息(在這種情況下第一組現在首先出現)?
這就是爲什麼PostgreSQL的說,你需要或者有created_at
在GROUP BY
(在這種情況下,你現在有3個不同的組,作爲第一個在兩個現在拆分),或者你需要使用一個聚合函數將多個值created_at
轉換爲單個值。
這將運行(我不知道你期望的結果是什麼,你可能不希望使用MAX(created_at)
你可以找到PostgreSQL的聚合函數here清單!):
Message.order("MAX(created_at) DESC")
.where(user_id: current_user.id)
.group(:sender_id, :receiver_id)
.count
您是否嘗試過將created_at添加到查詢中? 'Message.order(「created_at DESC」)。其中(user_id:current_user.id).group(:sender_id,:receiver_id,:created_at).count' – hd1
@ hd1:雖然這會使Postgre接受查詢,但結果會可能不是所期望的:從用戶1到用戶2的2條消息將不會被分組在一起,除非它們是在確切的時間發送的,這是不太可能的(並且可能不是想要的行爲)。 – Marth
對上述兩條評論都是肯定的。添加:created_at將使查詢適用於Postgres,但結果不正確。實際上,它不再進行分組,因爲每條消息都有唯一的:created_at列。 – slindsey3000