所以我有一個消息表和一個聊天表。這些消息具有日期和他們所在聊天的ID。現在,我要選擇每個聊天的最新消息。爲此,我需要最大的日期,它必須與郵件的日期相同。否則,我會收到來自此聊天的隨機消息。 如果我這樣做,它會告訴我'where子句'中的未知列'maxdate'',我不知道爲什麼。我也可以通過這個專欄來訂購。使用max時,where子句中的SQL未知列
這裏是我的查詢:
SELECT Chats.cid, cname, mtext, MAX(mdate) AS maxdate
FROM Chats
LEFT JOIN Messages ON Chats.cid = Messages.cid
WHERE maxdate = mdate
GROUP BY cid
ORDER BY maxdate DESC
讓你的where子句有一個。這裏有兩個問題。首先,別名max(mdate)在where子句中不可用,因爲由於操作順序。 where子句在別名處於作用域之前執行。其次,即使別名在範圍內,max(mdate)還沒有被計算出來。因此存在着。它旨在讓您在聚合發生後進行過濾。 – xQbert
用您正在使用的數據庫標記您的問題。 –
該GROUP BY無效。一般的GROUP BY規則說:「如果指定了GROUP BY子句,SELECT列表中的每個列引用必須標識一個分組列或作爲set函數的參數。」 – jarlh