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

Sql server 是否有获取两列最大值的T-SQL快捷方式,sql-server,sql-server-2008,tsql,sql-server-2008-r2,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、Co

我的意思是,假设你有一张这样的桌子:

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

像这样吗?一排

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
像这样?一排

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

不是真正的
MAX(Col1,Col2)
。如果您想模拟
MAX。。。按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;

不是真正的
MAX(Col1,Col2)
。如果您想模拟
MAX。。。按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;

按顺序分区,很好!按顺序分区,很好!当你说“这样一种方式,Col1,Col2值可以在另一个查询中使用”时,我被你的意思弄糊涂了。根据你到目前为止所说的,如果你还将Col1降序,那么你提供的查询也可以工作。当你说“这样一种方式,Col1,Col2值可以在另一个查询中使用”时,我被你的意思弄糊涂了根据您在此之前所说的,如果您还对Col1进行降序,那么您提供的查询将起作用。