原始表格:
| 自增 ID (id) | 名称 (name) | 成绩 (score) |
|---|---|---|
| 1 | 小明 | 10 |
| 2 | 小红 | 23 |
| 3 | 小特 | 66 |
| 4 | 小红 | 32 |
| 5 | 小特 | 68 |
| 6 | 小黄 | 66 |
目标表格:
| 自增 ID (id) | 名称 (name) | 成绩 (score) |
|---|---|---|
| 1 | 小明 | 10 |
| 4 | 小红 | 32 |
| 5 | 小特 | 68 |
| 6 | 小黄 | 66 |
需求:获取每个学生最新的一个成绩
已经尝试的方法:
SELECT * FROM (SELECT * FROM tb_test
ORDER BY id DESC) GROUP BY name
疑问:
GROUP BY这样用法是规范的吗?看教程一般都是跟 SUM 等公式一起用的GROUP BY在 SQLiteStudio 软件中获取的 id 是升序的,但在 QT 中使用又是降序的,是数据库引擎的问题? 1
cnoder 2022-06-29 18:44:48 +08:00 select * from table where id in (select max(id) from table group by name )
|
2
Suddoo 2022-06-29 19:04:36 +08:00 via iPhone
表里有创建时间字段吧,开窗函数,对名字分组,按时间降序排,取组内第一个
|
3
BreadKiller 2022-06-29 19:52:05 +08:00
select max(id),name,score from table group by name
|
4
akira 2022-06-29 21:39:23 +08:00
一楼就是最简单的方案了
|
5
v2eb 2022-06-30 00:11:13 +08:00 via Android
select group_concat(score) from table group by name
|