【问题标题】:Using Max() with other field with GROUP BY [duplicate]将 Max() 与 GROUP BY 的其他字段一起使用 [重复]
【发布时间】:2021-10-03 18:00:30
【问题描述】:

我在 SQL SERVER 中有下表:

CREATE TABLE cats
(
       name VARCHAR(10),
       breed   VARCHAR(25),
       weight decimal(8,2),
       color  VARCHAR(25),
       age int
)
INSERT INTO @cats VALUES('Ashes','Persian',4.5,'Black',5)
INSERT INTO @cats VALUES('Molly','Persian',4.2,'Black',1)
INSERT INTO @cats VALUES('Felix','Persian',5.0,'Tortoiseshell',2)
INSERT INTO @cats VALUES('Smudge','British Shorthair',4.9,'Black',4)
INSERT INTO @cats VALUES('Tigger','British Shorthair',3.8,'Tortoiseshell',2)
INSERT INTO @cats VALUES('Alfie','Siamese',5.5,'Brown',5)
INSERT INTO @cats VALUES('Oscar','Siamese',6.1,'Black',1)
INSERT INTO @cats VALUES('Millie','Maine Coon',5.4,'Tortoiseshell',5)
INSERT INTO @cats VALUES('Misty','Maine Coon',5.7,'Brown',2)
INSERT INTO @cats VALUES('Puss','Maine Coon',5.1,'Tortoiseshell',2)
INSERT INTO @cats VALUES('Smokey','Maine Coon',6.1,'Brown',4)
INSERT INTO @cats VALUES('Charlie','British Shorthair',4.8,'Black',4)

我需要为每个(颜色)选择\查看最古老的猫,以及它的名字。 使用GROUP BY color 非常容易,但问题是当您添加名称时,所有内容都错过了。

我想我应该使用OVER()Partition BYRANK()/DENSE_RANK...我都尝试了它们,但我卡住了。请帮我解决这个问题。

谢谢!

【问题讨论】:

  • “我都试过了,但我卡住了”——用什么?请说明您到目前为止尝试了什么以及有什么问题

标签: sql sql-server database tsql sql-server-2012


【解决方案1】:

这是一种方法:

select * from (
   select *, row_number() over(partition by color order by age desc) rn from cats
) t where rn = 1

db小提琴here

【讨论】:

    【解决方案2】:

    另一种方式,使用相关子查询:

    拨弄http://sqlfiddle.com/#!18/798bd7/3

    
    select 
      (select top 1 name from cats c 
        where c.age = tmp.maxage 
              and c.color = tmp.color) name,
      color, 
      maxage
    from (
      select color, max(age) as maxage
      from cats
      group by color
    ) tmp
    
    

    【讨论】:

      【解决方案3】:
      SELECT DISTINCT
          color
          , [max] = max(age) over (partition by color)
      FROM cats
      

      【讨论】:

        猜你喜欢
        • 2014-05-27
        • 1970-01-01
        • 2019-01-25
        • 1970-01-01
        • 2019-05-11
        • 2023-03-28
        • 1970-01-01
        • 2018-06-29
        • 2011-03-30
        相关资源
        最近更新 更多