2012-10-18 84 views
0

我想從嵌套選擇中選擇最大ID。如何從嵌套選擇中選擇最大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,但我想選擇的最大ID 「FROM [MyTable的] SELECT TOP 100 ID其中,ID> 100」

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

爲什麼你認爲它應該返回100?您要求您選擇的100條記錄中的最大標識號。如果要計算行數,則需要'count()'。 – dan1111

+1

不確定是什麼問題? sub select返回前100個ID。然後您從那裏獲取最大ID。 如果您需要查看100(如果按ID對MyTable進行排序,並且它有一串不間斷的id號),請在子查詢中添加'ORDER BY ID ASC' – SchmitzIT

+0

否我想要max id嵌套選擇。不算。 –

回答

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 ; 

nd在哪裏被用作子查詢,並且你將會有一致的行爲。

+0

謝謝!非常好的答案。 –

1

我覺得嵌套查詢只返回前100行和id 100000就是其中之一。試試這個

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

沒有「SELECT TOP 100 ID FROM [MyTable]」返回100 –

+0

我嘗試過按ID排序,它的工作原理。不是desc。謝謝。 –

+0

是的,那是我的意思:) –