相关疑难解决方法(0)

检索每个组中的最后一条记录 - MySQL

有一个表messages包含如下所示的数据:

Id   Name   Other_Columns
-------------------------
1    A       A_data_1
2    A       A_data_2
3    A       A_data_3
4    B       B_data_1
5    B       B_data_2
6    C       C_data_1
Run Code Online (Sandbox Code Playgroud)

如果我运行查询select * from messages group by name,我会得到如下结果:

1    A       A_data_1
4    B       B_data_1
6    C       C_data_1
Run Code Online (Sandbox Code Playgroud)

什么查询将返回以下结果?

3    A       A_data_3
5    B       B_data_2
6    C       C_data_1
Run Code Online (Sandbox Code Playgroud)

也就是说,应返回每组中的最后一条记录.

目前,这是我使用的查询:

SELECT
  *
FROM (SELECT
  *
FROM messages
ORDER BY id DESC) AS x
GROUP BY name
Run Code Online (Sandbox Code Playgroud)

但这看起来非常低效.还有其他方法可以达到相同的效果吗?

mysql sql group-by greatest-n-per-group

887
推荐指数
17
解决办法
58万
查看次数

为每个类别选择前10条记录

我想在一个查询中返回每个部分的前10条记录.任何人都可以帮忙解决这个问题吗?Section是表中的一列.

数据库是SQL Server 2005.我想按输入的日期返回前10名.部分是业务,本地和功能.对于一个特定日期,我只想要前(10)个业务行(最近的条目),前(10)个本地行和前(10)个特征.

sql sql-server sql-server-2005 greatest-n-per-group

189
推荐指数
13
解决办法
43万
查看次数

如何为MySQL中的每个topic_id选择最后两条记录

我必须为每个主题选择最后两个记录.

例如:表:消息

id  |  topic_id
------------
 1  |  1
 2  |  1
 3  |  1
 4  |  1
 5  |  2
 6  |  2
 7  |  2
 8  |  3
 9  |  3
10  |  3
Run Code Online (Sandbox Code Playgroud)

我想获取这些行:

 3 1
 4 1
 6 2
 7 2
 9 3
10 3
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

谢谢

mysql sql

9
推荐指数
2
解决办法
1万
查看次数

获取每组的前/后n条记录

我有两个表:tableA (idA, titleA)tableB (idB, idA, textB)有一个在它们之间一对多的关系.对于tableA中的每一行,我想检索tableB中对应的最后5行(由idB排序).

我试过了

SELECT * FROM tableA INNER JOIN tableB ON tableA.idA = tableB.idA LIMIT 5
Run Code Online (Sandbox Code Playgroud)

但它只是限制了INNER JOIN的全局结果,而我想限制每个不同tableA.id的结果

我怎样才能做到这一点 ?

谢谢

mysql sql inner-join greatest-n-per-group

7
推荐指数
2
解决办法
5358
查看次数