我正在尝试为SQL Server 2005写一个查询,但是我不知道该怎么做。我有一个包含以下字段的表:
MessageID int
CategoryID int
优先tinyint
MessageText NVARCHAR(MAX)
我需要一个查询,该查询将为Category中具有最高优先级的每一行返回*。例如,如果我有以下数据:
MessageID,类别ID,优先级,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,类别ID,优先级,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