如何根据SQL中三列的组合select取最大值
how to select max value according to the combination of three columns in SQL
我正在处理一个查询并陷入其中。
我这里有一个示例数据
Name Main_Model Sub_Model Sub_Sub_Model
===============================================
Ver1 1 0 0
ver2 1 0 0
ver1 1 2 0
ver2 1 1 0
ver1 2 0 0
ver2 1 1 1
ver1 2 2 1
根据这些数据,我必须 select 最大型号。例如
版本 1 的最大型号,即 ver1 是
Name Main_Model Sub_Model Sub_Sub_Model
===============================================
Ver1 2 2 1
对于版本 2,它将是
Name Main_Model Sub_Model Sub_Sub_Model
===============================================
Ver2 1 1 1
我试过内连接但没有成功。我真的很困惑它的逻辑。
请指导,以便我完成此任务。
谢谢
使用 window 函数对行进行排名并获得排名 1:
;with cte as(select *, row_number() over(partition by name
order by main_model desc,
sub_model desc,
sub_sub_model desc) rn
from table)
select * from cte
where rn = 1
使用ROW_NUMBER
对每一行进行排名:
;WITH cte AS
(
SELECT Name, Main_Model, Sub_Model, Sub_Sub_Model
rn = ROW_NUMBER() OVER (PARTITION BY Name ORDER BY Main_Model DESC, Sub_Model DESC, Sub_Sub_Model DESC)
FROM my_table
)
SELECT *
FROM cte
WHERE rn = 1
我正在处理一个查询并陷入其中。
我这里有一个示例数据
Name Main_Model Sub_Model Sub_Sub_Model
===============================================
Ver1 1 0 0
ver2 1 0 0
ver1 1 2 0
ver2 1 1 0
ver1 2 0 0
ver2 1 1 1
ver1 2 2 1
根据这些数据,我必须 select 最大型号。例如
版本 1 的最大型号,即 ver1 是
Name Main_Model Sub_Model Sub_Sub_Model
===============================================
Ver1 2 2 1
对于版本 2,它将是
Name Main_Model Sub_Model Sub_Sub_Model
===============================================
Ver2 1 1 1
我试过内连接但没有成功。我真的很困惑它的逻辑。 请指导,以便我完成此任务。
谢谢
使用 window 函数对行进行排名并获得排名 1:
;with cte as(select *, row_number() over(partition by name
order by main_model desc,
sub_model desc,
sub_sub_model desc) rn
from table)
select * from cte
where rn = 1
使用ROW_NUMBER
对每一行进行排名:
;WITH cte AS
(
SELECT Name, Main_Model, Sub_Model, Sub_Sub_Model
rn = ROW_NUMBER() OVER (PARTITION BY Name ORDER BY Main_Model DESC, Sub_Model DESC, Sub_Sub_Model DESC)
FROM my_table
)
SELECT *
FROM cte
WHERE rn = 1