2012-01-10 179 views
2

此代码可用于从mysql中的表中选择前10条记录。我怎样才能做到这一点,显示一个有1000条记录的表中的最后十条记录。我想以asc顺序显示名称,但不想改变它。如何从mysql中的表中选择最后N条记录

SELECT name, cost FROM test orderby name asc LIMIT 10 ; 
+0

它既可以按名称排序,也可以按日期插入/唯一标识。 – 2012-01-10 16:36:45

+0

这取决于你的意思是最后的N个记录 - 按照他们的名字或者编号,日期或者成本或者其他的顺序吗? – Abhay 2012-01-10 16:45:49

回答

6
SELECT q.name, q.cost 
    FROM (SELECT name, cost 
       FROM test 
       ORDER BY name DESC LIMIT 10) q 
    ORDER BY q.name ASC; 
2
SELECT name, cost 
FROM (SELECT name, cost FROM test orderby name desc LIMIT 10) as test 
ORDER BY name asc; 
3

LIMIT子句可以采用两个参数,这将提供一个偏移:

LIMIT子句可以用于约束的行数由SELECT返回 声明。 LIMIT采用一个或两个数字参数 ,它们都必须是非负整数常量(使用 预准备语句时除外)。

使用两个参数,第一个参数指定要返回的第一行的偏移量,第二个参数指定要返回的最大数量的行数 。初始行的偏移量为0(不是1):

SELECT * FROM tbl LIMIT 5,10; #检索行6-15要从某个偏移量直到结果集的末尾检索所有的 行,可以使用 的一些大数目作为第二个参数。此声明 检索从第96行到最后一行的所有行:

SELECT * FROM tbl LIMIT 95,18446744073709551615;用一个参数 该值指定从 开始返回的行数结果集:

SELECT * FROM tbl LIMIT 5; #检索前5行

http://dev.mysql.com/doc/refman/5.0/en/select.html

这个

所以:

SELECT name, cost FROM test orderby name asc LIMIT 990, 10; 
+5

当插入一行并且表现在总共有1,001行时会发生什么? – 2012-01-10 16:41:04

0

您可以使用ROW_NUMBER()对于此条款,这将有利于你

选择顶部“N”* from(选择ROW_NUMBER()OVER(按Col_Name desc排序)为RowNo,* from Table_Name)Table_Name

相关问题