简体   繁体   English

Select 行使用 group by 并且在每个组中获取基于另一个列值的最高值的列值

[英]Select rows using group by and in each group get column values based on highest of another column value

I need to get latest field based on another field in group by we have我需要根据我们有的组中的另一个字段获取最新字段

Table "SchoolReview"表“学校评论”

Id ID SchoolId学校编号 Review审查 Point观点
1 1 1 1 rv1房车1 8 8
2 2 1 1 rv2房车2 7 7
3 3 2 2 rv3房车3 4 4
4 4 2 2 rv4房车4 7 7
5 5 3 3 rv5房车5 2 2
6 6 3 3 rv6房车6 8 8

I need to group by SchoolId and the inside group I need to get Review and Point from highest "Id" column.我需要按 SchoolId 和内部组进行分组,我需要从最高的“Id”列中获取 Review 和 Point。

I dont need "Id" coulmn but even if I get it for this solution its okay.我不需要“Id”库,但即使我为这个解决方案得到它也没关系。

Result I am looking for shall look like this.我正在寻找的结果应该是这样的。

SchoolId学校编号 Review审查 Point观点
1 1 rv2房车2 7 7
2 2 rv4房车4 7 7
3 3 rv6房车6 8 8

Any one experienced in MS SQL Server can help in this regard?任何有经验的 MS SQL 服务器可以在这方面提供帮助吗?

You do not need to group the rows, you simply need to select the appropriate rows from the table.您不需要对行进行分组,您只需要 select 表中的相应行。 In this case, using ROW_NUMBER() is an option:在这种情况下,使用ROW_NUMBER()是一个选项:

Table:桌子:

SELECT *
INTO Data
FROM (VALUES
   (1, 1, 'rv1', 8),
   (2, 1, 'rv2', 7),
   (3, 2, 'rv3', 4),
   (4, 2, 'rv4', 7),
   (5, 3, 'rv5', 2),
   (6, 3, 'rv6', 8)
) v (Id, SchoolId, Review, Point)

Statement:陈述:

SELECT SchoolId, Review, Point
FROM (
   SELECT *, ROW_NUMBER() OVER (PARTITION BY SchoolId ORDER BY Id DESC) AS Rn
   FROM Data
) t
WHERE Rn = 1

Result:结果:

SchoolId Review Point
---------------------
1        rv2    7
2        rv4    7
3        rv6    8

Using sample data from other answer使用来自其他答案的样本数据

SELECT *
INTO #Data
FROM (VALUES
   (1, 1, 'rv1', 8),
   (2, 1, 'rv2', 7),
   (3, 2, 'rv3', 4),
   (4, 2, 'rv4', 7),
   (5, 3, 'rv5', 2),
   (6, 3, 'rv6', 8)
) v (Id, SchoolId, Review, Point)

SELECT S.SchoolId,
       S.Review,
       S.Point 
FROM   #Data S
INNER JOIN
(
    SELECT Id = MAX(S1.Id),
           S1.SchoolId
    FROM   #Data S1
    GROUP BY SchoolId
) X ON X.Id = S.Id AND X.schoolId = S.SchoolId
ORDER BY X.SchoolId    
;

output output

在此处输入图像描述

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在GROUP BY分组中,根据另一列的最大值选择值 - Within GROUP BY grouping, select value based on highest value of another column 根据另一列中的最高值从列中选择不同的值 - Select distinct values from a column based on highest value in another column 为另一列中的每个值选择不同的列,然后分组为 - Select Distinct Column For Each Value In Another Column Then Group By MySQL-选择列值仅为0的行,按另一列分组? - MySQL - Select rows where column value is only 0, group by another column? 选择具有最大列值的行按另一列选择 - Select Rows with Maximum Column Value group by Another Column 如果列值不在不同列的值的组中,则SQL选择行 - SQL select rows if a column value is not in a group of a different column's values 根据表中每个组的唯一列选择行 - select the rows based on unique column of each group from the table 如何创建SQL查询以获取另一列的每个GROUP'ed BY值的列的唯一值 - How to create SQL query to get unique values of column for each GROUP'ed BY value of another column 根据 GROUP BY 列选择行值作为列 - select row values as column based on GROUP BY column SQL 分组,根据另一列的顺序在一列上获取值 - SQL group by get value on one column based on order of another column
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM