【发布时间】:2019-11-09 13:36:01
【问题描述】:
我正在构建聊天应用程序,我只想根据用户显示最后一条记录 就像我已经发送了 1000 条消息,但我只与 10 人聊天,那么我需要获取 10 人的姓名和最后一条消息,无论是他们发送给我还是我最后发送给他们
请参阅上表并给我解决方案,例如我只想从最后两条记录中获取一条记录。
【问题讨论】:
我正在构建聊天应用程序,我只想根据用户显示最后一条记录 就像我已经发送了 1000 条消息,但我只与 10 人聊天,那么我需要获取 10 人的姓名和最后一条消息,无论是他们发送给我还是我最后发送给他们
请参阅上表并给我解决方案,例如我只想从最后两条记录中获取一条记录。
【问题讨论】:
您可以使用相关子查询进行过滤:
select t.*
from mytable t
where created = (
select max(created)
from mytable t1
where t1.m_from = t.m_from and t1.m_to = t.m_to
)
这将只为您提供每个(m_from, m_to) 元组的最新消息(根据created 列中存储的日期)。
如果您想要(m_from, m_to) 的最新消息或 (m_to, m_from),那么:
select t.*
from mytable t
where created = (
select max(created)
from mytable t1
where
(t1.m_from = t.m_from and t1.m_to = t.m_to)
or (t1.m_from = t.m_to and t1.m_to = t.m_from)
)
【讨论】:
created foreach m_from, m_to 组合在created 列中不能有重复,这确实应该给出每个组合的最新消息记录,否则不清楚哪个记录将是max where created values tie.. 如果有疑问,可以将这些日期时间更改为 datetime(6),而不是让窗口更小,除非你是超人,否则没有人能打字那么快:-)....