将为我提供每个 senderId 的最新 messageContent 帖子的 SQL 查询是啥?

Posted

技术标签:

【中文标题】将为我提供每个 senderId 的最新 messageContent 帖子的 SQL 查询是啥?【英文标题】:What is the SQL query that will give me the latest messageContent post for each senderId?将为我提供每个 senderId 的最新 messageContent 帖子的 SQL 查询是什么? 【发布时间】:2020-12-17 10:21:07 【问题描述】:

我有下面的mysql 表称为消息。我想要一个 SQL 查询,它可以为每个 senderId 提供最新的 messageContent 帖子?

messageId senderId receiverId public messageTime messageContent
14 awe123 awe123 Y 2020-12-14 20:40:06 Shock and Awe, Baby!
15 ewm20 ewm20 Y 2020-12-15 16:29:29 Merry Christmas, everyone, to all a good night.
16 ewm20 ewm20 Y 2020-12-16 21:27:09 Rock On, Brother!
17 ewm20 ewm20 Y 2020-12-16 23:27:19 Steelers will make a comeback!
18 falcon9 falcon9 Y 2020-12-17 02:06:50 What! The Starship blew up??? When!
19 ewm20 ewm20 Y 2020-12-17 02:22:35 the Starship blew up on December 9th while landing.
20 ewm20 ewm20 Y 2020-12-17 02:23:05 It's velocity was too high.
21 ewm20 ewm20 Y 2020-12-17 03:41:25 However Musk is still optimistic about reaching Mars.

结果会是这样的:

senderId messageTime messageContent
awe123 2020-12-14 20:40 Shock and Awe, Baby!
ewm20 2020-12-17 03:41 However Musk is still optimistic about reaching Mars.
falcon9 2020-12-17 02:06 What! The Starship

【问题讨论】:

【参考方案1】:

如果你的MySql版本不支持窗口函数,那么:

select m.* from message m where messageTime = (
    select messageTime from message m2 where m2.senderId = m.senderId
    order by messageTime desc
    limit 1
)

【讨论】:

Awesome Booboo,完成了我最终 Web 项目所需的功能。我会确保你得到它的信用。我不得不稍微调整一下列名:mysqli 不喜欢“m”。列名的引用。非常感谢!【参考方案2】:

你可以使用windows函数row_number如下:

select * from
(select t.*, 
        row_number() over (partition by senderId order by messageTime  desc) as rn
   from your_table t) t
 where rn = 1

【讨论】:

感谢您的回复,大力水手。我得到一个派生表别名错误代码:1248。 完成。只需要给子查询起别名。

以上是关于将为我提供每个 senderId 的最新 messageContent 帖子的 SQL 查询是啥?的主要内容,如果未能解决你的问题,请参考以下文章

第七章 LED将为我闪烁:控制发光二极管 心得笔记

LED将为我闪烁:控制发光二极管

第七章:LED将为我闪烁:控制发光二极管

第7章 LED将为我闪烁:控制发光二极管

第七章 LED将为我闪烁:控制发光二极管

Oracle查询具有特定列平均值的最新行?