有一个表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)
但这看起来非常低效.还有其他方法可以达到相同的效果吗?
我想在一个查询中返回每个部分的前10条记录.任何人都可以帮忙解决这个问题吗?Section是表中的一列.
数据库是SQL Server 2005.我想按输入的日期返回前10名.部分是业务,本地和功能.对于一个特定日期,我只想要前(10)个业务行(最近的条目),前(10)个本地行和前(10)个特征.
我必须为每个主题选择最后两个记录.
例如:表:消息
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)
我怎样才能做到这一点?
谢谢
我有两个表: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的结果
我怎样才能做到这一点 ?
谢谢