如何根据新创建的 MAX() 列进行 GROUP BY

问题描述 投票:0回答:1

我的桌子:

姓名 身份证 状态
罗杰柯林斯 904 3
罗杰·约翰·霍斯普尔 915 3
罗杰·约翰·西皮 932 3
罗杰·约翰·希佩和 T.C.罗威尔 5341 2
罗杰·约翰·希佩和 T.C.罗威尔 5341 3

由于输入不良,有些人(例如 R J Shippey 和 T C Rowell)的“状态”值超过 1。 我想做的是对此表进行 GROUP BY,但对状态的最大值进行分组。 所以表格看起来像这样:

姓名 身份证 最大状态
罗杰柯林斯 904 3
罗杰·约翰·霍斯普尔 915 3
罗杰·约翰·西皮 932 3
罗杰·约翰·希佩和 T.C.罗威尔 5341 3

我已经成功地用 Max_Status 创建了一个新列,如下所示:

姓名 身份证 状态 最大_状态
罗杰柯林斯 904 3 3
罗杰·约翰·霍斯普尔 915 3 3
罗杰·约翰·西皮 932 3 3
罗杰·约翰·希佩和 T.C.罗威尔 5341 2 3
罗杰·约翰·希佩和 T.C.罗威尔 5341 3 3

使用此代码:

SELECT Name, 
        ID,
       Status,  
       MAX(Status) OVER(PARTITION BY Name) AS MaxStatus 

FROM [dbo].[TaskStatus_View]

但现在我无法根据 Max_Status 列进行分组,因为(据我了解)我是在访问原始数据库后创建它的,所以它只是说无效的列名。 所以我不确定下一步。我尝试过将分区行放入子查询中,但我无法真正直观地理解这一点。

sql group-by partition
1个回答
0
投票

以下是如何将查询用作子查询并执行分组

SELECT Name,ID,MaxStatus FROM
(
  SELECT Name,ID,Status,MAX(Status) OVER(PARTITION BY Name) AS MaxStatus 
FROM [dbo].[TaskStatus_View]
) t
GROUP BY Name,ID,MaxStatus

小提琴

姓名 身份证 最大状态
罗杰柯林斯 904 3
罗杰·约翰·霍斯普尔 915 3
罗杰·约翰·西皮 932 3
罗杰·约翰·希佩和 T.C.罗威尔 5341 3
© www.soinside.com 2019 - 2024. All rights reserved.