嗨,我将聊天数据存储在一个表(不是我的设计)MYSQL中!
Table: chat
id (long)
lastWrite (date)
messageStatus (varchar) //can be send , received, read
toName(varchar) //receiver
我的问题是我不知道如何获取所有不同接收器的最新列表(具有lastWrite的最新时间戳)(每个接收器仅一行)。目标应该是在一个列表中显示所有接收者的最新messageStatus。
我试过了:
select * from (
select c.* from chat c where organizationId = 885 order by c.lastWrite desc
) as tmp group by tmp.toName
似乎是正确的方向,但是……。错误的,因为它没有给我最新的条目,每个接收者仅给我一个条目,这就是我想要的,但不是最后一个条目,似乎是随机的。
有人可以帮忙吗?
最佳答案
因此,您将获得每个toName的最新消息的所有列
select *
from chat
where ( toName, lastwrite) in (
SELECT toName, MAX(lastwrite)
FROM chat
GROUP BY toName
或者如果您需要ondlu messageStatus
select toName, lastwrite, messageStatus
from chat
where ( toName, lastwrite) in (
SELECT toName, MAX(lastwrite)
FROM chat
GROUP BY toName
)