所以我有一张消息表和一张聊天表。这些消息有一个日期和他们所在聊天的ID。现在我想选择每个聊天的最新消息。为此,我需要最大的日期必须与消息的日期相同。否则,我会从此聊天中收到一条随机消息。 如果我这样做,它会告诉我'未知栏' maxdate'在' where子句''而且我不知道,为什么。我也可以通过这个专栏订购。
这是我的问题:
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
答案 0 :(得分:0)
改变这个:
WHERE maxdate = mdate
这样的事情
WHERE mdate = (select max(mdate) from etc)
同样在您的select子句中,更改
MAX(mdate) AS maxdate
到
mdate
答案 1 :(得分:0)
请尝试此查询。
SELECT Chats.cid, cname, mtext, mdate
FROM Chats
LEFT JOIN Messages ON Chats.cid = Messages.cid
INNER JOIN ( SELECT Chats.cid cid, MAX(mdate) AS maxdate
FROM Chats
LEFT JOIN Messages ON Chats.cid = Messages.cid
GROUP BY Chats.cid ) tmp ON tmp.maxdate = mdate AND tmp.cid = Chats.cid
ORDER BY mdate DESC
答案 2 :(得分:0)
你正在寻找这样的东西:
SELECT c.cid, c.cname, m.mtext, mdate
FROM Chats c LEFT JOIN
Messages m
ON c.cid = m.cid AND
m.mdate = (SELECT MAX(m2.mdate) FROM Messages m2 WHERE m2.cid = c.id)
ORDER BY mdate DESC;
由于您使用的是LEFT JOIN
,因此与ON
子句中的最大值进行比较非常重要。