使用max时where子句中的SQL未知列

时间:2017-08-16 12:51:00

标签: sql

所以我有一张消息表和一张聊天表。这些消息有一个日期和他们所在聊天的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

3 个答案:

答案 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子句中的最大值进行比较非常重要。