按名称选择每个记录组的最大值

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
另一答案

我觉得通过自我加入做得更好:

  • 首先,内部查询准备了一个Name1Name2的列表,它们具有相同的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

试试这个吧。

以上是关于按名称选择每个记录组的最大值的主要内容,如果未能解决你的问题,请参考以下文章

oracle 查询每组的最大值

每个项目 mongodb 组的最新记录(按日期)

SQL:查找每组的最大记录[重复]

SQL:查找每组的最大记录[重复]

选择“高”列中的前 5 个最大记录,并从同一查询中的“低”列和按股票名称分区的同一个表中选择 5 个最小记录

如何在 PostgreSQL 中按类别选择具有最大日期组的 id?