我的意思是,假设你有一张表:
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 :(得分: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