2011-11-23 113 views
0
的最高值的T-SQL快捷

我的意思是,說你有一個像表:是否有獲得兩列

Col1 Col2 
---- ---- 
1 1 
1 9 
2 1 
2 3 
4 1 
4 2 

我想:Col1中= 4和col2的= 2,因爲Col1有優先權。換句話說,我想要Col1的最大值,並且該值是最小T-SQL表達式中Col2的最大值。這幾乎像是在說:

SELECT TOP 1 Col1, Col2 
FROM MyTable 
ORDER BY Col1, Col2 DESC 

但在這樣一種方式,Col1中這樣做,col2的值是另一個查詢中使用。

+0

我對你是什麼意思時,你說糊塗「這樣一種方式,Col1中,col2的值是另一個查詢中使用。」根據您在此之前所說的話,如果您還訂購了Col1降序,則您提供的查詢將會起作用。 –

回答

2

是否這樣?一排

SELECT ... 
FROM 
    SOmeTable 
    JOIN 
    (
    SELECT TOP 1 Col1, Col2 
    FROM MyTable 
    ORDER BY Col1, Col2 DESC 
    ) foo ON S.Col1 = foo.Col1 

還是每個外排?

SELECT ... 
FROM 
    SOmeTable S 
    CROSS APPLY 
    (
    SELECT TOP 1 Col2 
    FROM MyTable M 
    WHERE S.somecol = M.SomeCol 
    ORDER BY Col2 DESC 
    ) foo 

SELECT ... 
FROM 
    SOmeTable S 
    CROSS APPLY 
    (
    SELECT Col1, MAX(Col2) AS MaxCOl2 
    FROM MyTable M 
    GROUP BY Col1 
    ) foo ON S.Col1 = foo.Col1 
3

其實沒有什麼像MAX(Col1, Col2)。如果你想模擬MAX ... GROUP BY X你可以使用

WITH T AS 
(
SELECT Col1, 
     Col2, 
     ROW_NUMBER() OVER (PARTITION BY X ORDER BY Col1 DESC, Col2 DESC) AS RN 
FROM MyTable 
) 
SELECT Col1, 
     Col2, 
      X 
FROM T 
WHERE RN= 1; 
+0

分區與ORDER BY,很好! –

0
WITH t(Col1,maxCol1,maxCol2) AS (
    SELECT 
    Col1, 
    MAX(Col1) OVER(), 
    MAX(Col2) OVER(PARTITION BY Col1) 
) 
SELECT TOP 1 maxCo11,maxCol2 FROM t WHERE Col1 = maxCol1 
相關問題