SQL - 如何为每个用户检索 5 个最近的评论

Posted

技术标签:

【中文标题】SQL - 如何为每个用户检索 5 个最近的评论【英文标题】:SQL - How to retrieve 5 most recent comments for each user 【发布时间】:2020-10-20 01:32:55 【问题描述】:

我有一个名为“user_text”的表格

| id | user_id |        date         |         text         |
|----|---------|---------------------|----------------------|
| 1  |    4    | 07/01/2019 10:04:11 | This is a test       |
| 2  |    9    | 19/11/2018 09:43:00 | Here's another test  |
| ...|         |                     |                      |         

我需要做的是为每个 user_id 选择 5 个最近的(字段“日期”)条目

我已经搜索了很多,似乎不知何故我需要一个子查询,但我找不到正确的组合。

【问题讨论】:

哪个版本的mysql 是版本 5.* 我尝试了很多东西,相信我...但没有任何意义 【参考方案1】:

在 MySQL 5.x 中,一个选项使用关联子查询:

select u.*
from user_text u
where (
    select count(*)
    from user_text u1
    where u1.user_id = u.user_id and u1.date >= u.date
) <= 5

【讨论】:

【参考方案2】:

你可以使用row_number():

select t.*
from (select t.*, row_number() over (partition by user_id order by date desc) as seqnum
      from t
     ) t
where seqnum <= 5;

【讨论】:

以上是关于SQL - 如何为每个用户检索 5 个最近的评论的主要内容,如果未能解决你的问题,请参考以下文章

如何为每个用户顺序运行多个请求

如何为具有特定子子值的子项检索 Firebase DatabaseReference?

如何为 SQL 中的每个特定列应用窗口? [复制]

C# SQL:如何为 SQL 表列中的每个不同值启动代码?

如何为每个组连接来自某一列的所有字符串

在 SQL 中,如何为另一列的每个不同值创建新的值列?