说我有以下记录:
1, A
1, B
2, A
2, B
2, C
1, C
我想要1
和2
的最后一条记录,该记录应为1, C
和2, C
。我如何查询?
如果我对号码进行了GROUP BY,我会得到1, A
和2, A
。
答案 0 :(得分:3)
如果按''last'表示按字母顺序最大值,那么可能是这样:
select id, max(val)
from mytable
group by id
答案 1 :(得分:1)
如果没有某种索引或插入顺序,就无法得到你想要的东西; SQL查询是非确定性的。
答案 2 :(得分:1)
既然我们已经确定你的意思是“按时间顺序排列”,那么我可以创建一个合适的答案......
SQL没有年表概念。所以你必须自己记录插入顺序。最常见的是,您将添加一个自动增量字段,然后在ORDER BY
子句中使用该字段以及LIMIT
子句。
答案 3 :(得分:0)
如果它不是字母,那么你需要使用LIMIT,所以只需执行以下操作。
select @rownum:=@rownum+1 as naturalorder, * from foo, (SELECT @rownum:=0) nat order by naturalorder desc limit 1;
但警告说没有保证mysql对记录的顺序。所以你可能想要添加一个带有时间戳字段的额外字段或者一个auto_increment,它将具有您正在寻找的顺序,我认为。
如果它是按字母顺序排列的,那么诀窍是按代码降序排序,然后获得第一条记录。你可以将其限制为一个。
select num, code from thetable order by code DESC limit 1
如果您使用分组依据,则必须扫描整个表格。并且很难获得完整的记录。