使用两个变量列从 table 中选择最大值 (microsoft SQL)
selecting max value from table with two variable colums (microsoft SQL)
我正在使用看起来像这样的 table:
开始
https://i.stack.imgur.com/uibc3.png
我想要的结果是这样的:
结果
https://i.stack.imgur.com/v0sic.png
所以我正在尝试 select 来自两个“组合”列的最大值。如果数值相同(C 部分),则结果无关紧要。
我尝试按最大值对 table 进行排序,然后使用 distinct,但结果并不像预期的那样
您能否对此提供解决方案或一些见解?提前致谢!
使用row_number()
:
select *
from (
select t.*, row_number() over(partition by part order by amount desc, zone) rn
from mytable t
) t
where rn = 1
对于每个 part
,这会为您提供金额最高的行;如果有顶级关系,列 zone
用于打破它们。
如果您想允许平局,请改用 rank()
,例如:
rank() over(partition by part order by amount desc) rn
您可以使用 SUB 查询
来实现
DECLARE @T TABLE(
PART VARCHAR(50),
ZONE VARCHAR(10),
Amt INT)
Insert Into @T Values ('PartA','71H',1),('PartA','75H',2),('PartB','98D',1),('PartB','98A',3),('PartC','75H',1),('PartC','52H',1)
SELECT M.PART,MIN(M.Zone) AS ZONE,S.AMOUNT
FROM @T M
INNER JOIN (
SELECT Part,MAX(Amt) as AMOUNT From @T
GROUP BY PART) S ON S.AMOUNT=M.Amt AND S.PART=M.PART
GROUP BY M.PART,S.AMOUNT
ORDER BY M.PART
我正在使用看起来像这样的 table:
开始 https://i.stack.imgur.com/uibc3.png
我想要的结果是这样的:
结果 https://i.stack.imgur.com/v0sic.png
所以我正在尝试 select 来自两个“组合”列的最大值。如果数值相同(C 部分),则结果无关紧要。 我尝试按最大值对 table 进行排序,然后使用 distinct,但结果并不像预期的那样
您能否对此提供解决方案或一些见解?提前致谢!
使用row_number()
:
select *
from (
select t.*, row_number() over(partition by part order by amount desc, zone) rn
from mytable t
) t
where rn = 1
对于每个 part
,这会为您提供金额最高的行;如果有顶级关系,列 zone
用于打破它们。
如果您想允许平局,请改用 rank()
,例如:
rank() over(partition by part order by amount desc) rn
您可以使用 SUB 查询
来实现DECLARE @T TABLE(
PART VARCHAR(50),
ZONE VARCHAR(10),
Amt INT)
Insert Into @T Values ('PartA','71H',1),('PartA','75H',2),('PartB','98D',1),('PartB','98A',3),('PartC','75H',1),('PartC','52H',1)
SELECT M.PART,MIN(M.Zone) AS ZONE,S.AMOUNT
FROM @T M
INNER JOIN (
SELECT Part,MAX(Amt) as AMOUNT From @T
GROUP BY PART) S ON S.AMOUNT=M.Amt AND S.PART=M.PART
GROUP BY M.PART,S.AMOUNT
ORDER BY M.PART