我正在尝试编写SQL Server 2005的查询,但我无法弄清楚如何做到这一点.我有一个包含以下字段的表:
MessageID int
CategoryID int
Priority tinyint
MessageText NVARCHAR(MAX)
我需要一个查询,它将为类别中具有最高优先级的每一行返回*.例如,如果我有以下数据:
MessageID,CategoryID,优先级,MessageText 1,100,1
,错误#1234发生2,100,2
,错误#243发生
3,100,3,错误#976发生4,200,4
,错误#194发生
5,200 ,1,错误#736发生6,300,3
,错误#54发生
7,300,2,发生错误#888
那么结果将是:
MessageID,CategoryID,优先级,MessageText 3,100,3
,错误#976发生4,200,4
,错误#194发生6,300,3,发生
错误#54
请注意,它为每个类别返回一行,并且它是该类别具有最高优先级的行.
任何人都可以告诉我如何编写此查询?
验证:
SELECT
highest_priority_messages.*
FROM
(
SELECT
m.MessageID
, m.CategoryID
, m.Priority
, m.MessageText
, Rank() OVER
(PARTITION BY m.CategoryID ORDER BY m.Priority DESC) AS p_rank
FROM [Message] m
GROUP BY
m.CategoryID
, m.Priority
, m.MessageID
, m.MessageText
) highest_priority_messages
WHERE
p_rank = 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1269 次 |
| 最近记录: |