如何从嵌套选择中选择最大ID?

时间:2012-10-18 12:10:29

标签: sql-server tsql

我想从嵌套选择中选择最大ID。

这是我的疑问:

select max(Id) from (SELECT TOP 100 Id FROM [MyTable]) t

选择应返回100,但它实际上返回 MyTable 的最大ID。

P.S。 MyTable 包含100 000条记录,因此查询返回100 000条。

以下是一个示例:

返回100(没关系)

SELECT TOP 100 Id FROM [MyTable]

返回100 000,但我想选择“SELECT TOP 100 Id FROM [MyTable]”的最大ID

select max(Id) from (SELECT TOP 100 Id FROM [MyTable]) t

返回100 000,但我想选择“SELECT TOP 100 Id FROM [MyTable]的最大ID,其中Id> 100”

select max(Id) from (SELECT TOP 100 Id FROM [MyTable] where Id > 100) t

2 个答案:

答案 0 :(得分:1)

我认为嵌套查询只返回前100行,而id 100000就是其中之一。试试这个

select max(Id) from (SELECT TOP 100 Id FROM [MyTable] order by Id asc) t

答案 1 :(得分:1)

TOP但没有ORDER BY的查询,与您的一样:

SELECT TOP 100 
    Id 
FROM tableX ;

不会返回一致的结果。上面的意思是“告诉我100个ID,我不关心哪个,表中有数百万个”。无论何时运行查询,DBMS都可以自由返回它选择的任何100。它甚至可以选择在前两年送回相同的100,然后突然改变主意并返回其他100个。

事实上,这就是你所看到的,当使用子查询时,优化器会将查询“给我最多100个ID”转换为 “给我表“

的所有ID的最大值

将该查询更改为(您可以使用您选择的任何ORDER BY):

SELECT TOP 100 
    Id 
FROM tableX 
  ORDER BY Id ;
单独使用

并将其用作子查询,您将具有一致的行为。