簡體   English   中英

Select 行使用 group by 並且在每個組中獲取基於另一個列值的最高值的列值

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

我需要根據我們有的組中的另一個字段獲取最新字段

表“學校評論”

ID 學校編號 審查 觀點
1 1 房車1 8
2 1 房車2 7
3 2 房車3 4
4 2 房車4 7
5 3 房車5 2
6 3 房車6 8

我需要按 SchoolId 和內部組進行分組,我需要從最高的“Id”列中獲取 Review 和 Point。

我不需要“Id”庫,但即使我為這個解決方案得到它也沒關系。

我正在尋找的結果應該是這樣的。

學校編號 審查 觀點
1 房車2 7
2 房車4 7
3 房車6 8

任何有經驗的 MS SQL 服務器可以在這方面提供幫助嗎?

您不需要對行進行分組,您只需要 select 表中的相應行。 在這種情況下,使用ROW_NUMBER()是一個選項:

桌子:

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 SchoolId, Review, Point
FROM (
   SELECT *, ROW_NUMBER() OVER (PARTITION BY SchoolId ORDER BY Id DESC) AS Rn
   FROM Data
) t
WHERE Rn = 1

結果:

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

使用來自其他答案的樣本數據

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

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM