按名称选择每个记录组的最大值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了按名称选择每个记录组的最大值相关的知识,希望对你有一定的参考价值。
我有一个包含多个列的表:
Name Price Date ...
a 100 .....
b 110 .....
c 90 .....
a 130 .....
b 60 .....
d 200 .....
c 5 .....
我想写一个查询,它会给我每个名字的最高价格:
a 130 .....
b 110 .....
c 90 .....
d 200 .....
答案
试试这个:
SELECT *
FROM
(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY Name
ORDER BY Name ASC, Price DESC) AS RN
FROM Table
) AS T
WHERE RN = 1
另一答案
用这个
SELECT tbl1.* FROM table_1 tbl1 INNER JOIN(
SELECT name,MAX(price) price FROM table_1 GROUP BY name) tbl2
ON tbl1.name = tbl2.name AND tbl1.price = tbl2.price
代码改革;)
另一答案
;with cte as(
select
rn = row_number() over(partition by Name order by Price desc),
*
from <table name>
)
select
<columns>
from cte
where rn = 1
另一答案
我觉得通过自我加入做得更好:
- 首先,内部查询准备了一个
Name1
和Name2
的列表,它们具有相同的Name
,但它们的Price
是不同的, - 然后,由
Name
分组,通过max()找出每个Name
的最大价格
查询:
select Name1, max(Price1)
(
select
tbl1.Name Name1, tbl1.Price Price1,
tbl2.Name Name2, tbl2.Price Price2
from TableName tbl1 left join TableName tbl2
on tbl1.Name = tbl2.Name
and tbl1.Price != tbl2.Price
)ds
group by Name1
产量
Name | Price
---------------
a | 130
b | 110
c | 90
d | 200
另一答案
select Name, Price, Date from (select max(Price)as p, Name as n from TableName
group by Name) as A
inner join
(select * from from TableName where A.p=price and A.n=Name) as B
试试这个吧。
以上是关于按名称选择每个记录组的最大值的主要内容,如果未能解决你的问题,请参考以下文章