![](/img/trans.png)
[英]Within GROUP BY grouping, select value based on highest value of another column
[英]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.