2011-11-23 60 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 
相关问题