[英]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 ![]() |
SchoolId![]() |
Review![]() |
Point![]() |
---|---|---|---|
1 ![]() |
1 ![]() |
rv1![]() |
8 ![]() |
2 ![]() |
1 ![]() |
rv2![]() |
7 ![]() |
3 ![]() |
2 ![]() |
rv3![]() |
4 ![]() |
4 ![]() |
2 ![]() |
rv4![]() |
7 ![]() |
5 ![]() |
3 ![]() |
rv5![]() |
2 ![]() |
6 ![]() |
3 ![]() |
rv6![]() |
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 ![]() |
rv2![]() |
7 ![]() |
2 ![]() |
rv4![]() |
7 ![]() |
3 ![]() |
rv6![]() |
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.