嗨,我将聊天数据存储在一个表(不是我的设计)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
  )

10-05 18:44