sql如何查询一个表中的后5行数据,不用排序

MrHello 发布于 2013/07/30 09:31
阅读 2K+
收藏 0
加载中
0
LianyouCQ
LianyouCQ

引用来自“Lesus”的答案

首先要知道一共有多少行  n;

然后select * from tablename limit 5 offset n - 5;

delimiter $$
DROP PROCEDURE IF EXISTS lastNRow $$ -- 如果过程lastNRow存在就删除
CREATE PROCEDURE lastNRow(IN n INT)
BEGIN 
    DECLARE total INT DEFAULT 0; -- 定义总行数变量
    DECLARE offLen INT DEFAULT 0; -- 定义跨度
    SELECT COUNT(*) INTO total from tablename; -- 将总行数赋值
    set offLen := total - n; -- 计算跨度
    SELECT * FROM tablename limit n offset offLen; -- 查询要求的记录
END;
$$
DELIMITER ;
   
CALL lastNRow(9); -- 调用过程。
mark35
mark35
结果也许是楼主需要的,但这个是没意义的代码:“最后五行”这句话本身就隐含着排序的,如果楼主意思是“不排序的 随机的最后五行”, 那既然随机,最后五行和最前五行又有什么区别呢?
0
LianyouCQ
LianyouCQ

首先要知道一共有多少行  n;

然后select * from tablename limit 5 offset n - 5;

马瑞wwwwww
马瑞wwwwww
回复 @Lesus : 我在SQL SERVER下试过了,没问题
LianyouCQ
LianyouCQ
回复 @马瑞wwwwww : 你这种写法是不完全正确的,count(1)是指第一个字段,如果第一个字段有很多为NULL时,那就悲剧了,统计的不是总行数了。
马瑞wwwwww
马瑞wwwwww
回复 @MrHello : select count(1) from table_name
MrHello
MrHello
回复 @Lesus : 能不能详细的写一下代码,多谢了
LianyouCQ
LianyouCQ
回复 @MrHello : 这种语法是不支持的,一种是分成两步做。另外一种是封装成函数。
下一页
0
huan
huan
不用排序。。。。。。。。。。。
0
优雅先生
优雅先生
获取总行数,然后用rowid作为WHERE过滤条件?
0
mark35
mark35

不排序怎么可能知道后5行是哪5行呢?

这个“后5行”是最后5行,还是后面5行? 楼主表述要准确

MrHello
MrHello
最后五行
0
魔力猫
魔力猫
不排序和后N行本身描述就是矛盾的。
0
StormFour
StormFour

楼主自己都不知道要干嘛

0
IdleMan
IdleMan
不排序,返回的后五行数据是随机的
0
Tuesday
Tuesday

也就是说limit 5就行了, 反正楼主也区分不出这5条是新是旧.

在程序代码中, 任务事务都有排序.

0
田军
田军

试试这个:

declare @count int

select count(*) from table

if(@count<=5)

begin

    select top 5 from table

end

else

begin

select top 5 from table t1

where t1.id not in(

   select  top ((select count(1) from table t2 ) -5)  t3.id from table t3

)

end

返回顶部
顶部