是否有用于获取两列最大值的T-SQL快捷方式

时间:2011-11-23 18:46:40

标签: sql-server sql-server-2008 tsql sql-server-2008-r2

我的意思是,假设你有一张表:

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值在另一个查询中可用。

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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

答案 2 :(得分: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