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进行降序,那么您提供的查询将起作用。