Существует ли ярлык T-SQL для получения максимальных значений двух столбцов - PullRequest
0 голосов
/ 23 ноября 2011

Я имею в виду, скажем, у вас есть таблица типа:

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

Я хочу получить: Col1 = 4 и Col2 = 2, потому что Col1 имеет приоритет.Другими словами, я хочу наибольшее значение Col1 и для этого значения наибольшее значение Col2 в минимальном выражении T-SQL.Это почти как сказать:

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

Но сделать это так, чтобы значения Col1, Col2 можно было использовать в другом запросе.

Ответы [ 3 ]

3 голосов
/ 23 ноября 2011

Не совсем как 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;
2 голосов
/ 23 ноября 2011

Как это?Один ряд

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
0 голосов
/ 16 января 2014
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
...