将为我提供每个 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 查询是啥?的主要内容,如果未能解决你的问题,请参考以下文章