当前位置:  开发笔记 > 编程语言 > 正文

半棘手的SQL查询

如何解决《半棘手的SQL查询》经验,为你挑选了1个好方法。

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

请注意,它为每个类别返回一行,并且它是该类别具有最高优先级的行.

任何人都可以告诉我如何编写此查询?



1> cfeduke..:

验证:

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

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有