我正在尝试编写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