2016-08-02 52 views
1

假設我有一張如下所示的表格;SQL服務器 - 將搜索限制在列中的最大值

version_number ID Value 
1     33 Foo 
2     33 Bar 
1     37 Foo 

如果ID是33並且只能從最大版本號中選擇,我將如何從表中返回值字段? (在這種情況下,2)

類似;

SELECT Value FROM Table WHERE ID = 33 and MAX(version_number) 

編輯:兩個答案下面的工作。我要和Tim Schmelter的答案一起,因爲我認爲它更優雅一些,但我已經把它們都投了票。謝謝你們:)

回答

3

在sql-server中,您可以使用排名功能,如ROW_NUMBER,f.e.與CTE:

WITH CTE AS 
(
    SELECT t.*, rn = Row_Number() Over (Partition By ID Order By version_number Desc) 
    FROM dbo.TableName t 
) 
Select Value From CTE 
WHERE ID = 33 
    AND rn = 1 
+0

,如果我想指定version_number,但我需要它,所以它符合MAX對於指定值的任何值。因此,例如,搜索ID 33會得到v​​ersion_number 2的那一行,但如果有意義,搜索ID 37會得到version_number 1的那一行? –

+0

@RyanHargreaves:它的工作方式。它將總是返回屬於每個ID的最大版本號的行(因爲「通過ID分區」)。如果您希望將版本號的最小版本更改爲version_number Asc。 –

+0

對不起,你說的是正確的,我忘了訂購我的Desc。謝謝 :) –

1

您可以使用子查詢爲此:通過得到過濾後的數據

SELECT Value FROM 
(SELECT TOP 1 * 
    FROM Table 
    WHERE ID = 33 
    ORDER BY version_number 
) as t 

也就是說,開始,然後只打印所需的列。

+0

我想返回的值,而不是版本號 –

+0

@RyanHargreaves哦,我明白了。檢查我的更新回答 – fedorqui

+0

當我翻譯LIMIT關鍵字時出現語法錯誤。這是在SQL服務器上嗎? –