有一个表tb,主键为ID,自增长int类型,3条记录
ID
3
6
7
为了获取前2条记录的最大ID,于是很easy的写出了以下语句:
select max(ID) from (select top 2 ID from tb) t
------结果
7
很困惑,应该为6才对啊,因为select top 2 ID from tb的返回
3
6
测试发现select max(ID) from (select top N ID from tb) t始终返回当前表的最大值
只有在N=1时,即:
select max(ID) from (select top 1 ID from tb) t
或显式的加了order by之后才符合预期,即:
select max(ID) from (select top N ID from tb order by ID) t
求解惑
ps:数据库为Sql Server 2008
分享到:
------解决方案--------------------
我用的是sql server 2008r2,做了一个实验,就是正常的,没有你说的这种问题:
create table tt(id int not null identity(1,1))
insert into tt
default values
insert into tt
default values
insert into tt
default values
insert into tt
default values
insert into tt
default values
insert into tt
default values
insert into tt
default values
select * from tt
delete from tt
where id not in (3,6,7)
select top 2 ID from tt
/*
ID
3
6
*/
select max(ID)
from (
select top 2 ID from tt
) t
/*
(无列名)
6
*/