根据最大值过滤 SQL Server 数据

Posted

技术标签:

【中文标题】根据最大值过滤 SQL Server 数据【英文标题】:Filter SQL Server data according to its max value 【发布时间】:2020-08-20 22:32:29 【问题描述】:

我有一个 SQL Server 2008 表,例如:

    +------+-------+--------------------------------------+
    | id   | level | content                              |
    +------+-------+--------------------------------------+
    | 1    | 1     | ...                                  |
    | 2    | 2     | ...                                  |
    | 1    | 2     | ...                                  |
    | 1    | 3     | ...                                  |
    | 2    | 1     | ...                                  |
    | 1    | 4     | ...                                  |
    | 3    | 1     | ...                                  |
    +------+-------+--------------------------------------+

对于每个 id,它可能有三个、两个或四个级别保存在上面的表格中。如何获取每个 id 的数据:

    每个id在final table中最多有3条记录 如果一个id的最大级别大于3,则三个记录的级别从max到max-3; 如果一个 id 的最大级别等于或小于 3,则保持原样。

所以我想要的决赛桌是:

    +------+-------+--------------------------------------+
    | id   | level | content                              |
    +------+-------+--------------------------------------+
    | 1    | 1     | ...                                  |
    | 2    | 2     | ...                                  |
    | 1    | 2     | ...                                  |
    | 1    | 3     | ...                                  |
    | 2    | 1     | ...                                  |
    | 3    | 1     | ...                                  |
    +------+-------+--------------------------------------+

我怎样才能划线?非常感谢。

【问题讨论】:

请向我们展示您的尝试。 【参考方案1】:

我认为您想要每个 id 的 3 个最新 levels。如果是这样,您可以像这样使用窗口函数:

select *
from (
    select t.*, row_number() over(partition by id order by level desc) rn
    from mytable t
) t
where rn <= 3

【讨论】:

以上是关于根据最大值过滤 SQL Server 数据的主要内容,如果未能解决你的问题,请参考以下文章

SQL:从 SQL Server 中的嵌套 JSON 中查找最大值

sql server 2008中如何取某字段最大值所在的一条数据(多个字段)

SQL Server:获取具有附加数据的一系列值之间的最大值

SQL Server中如何分组查询最大值

SQL Server分组查询某最大值的整条数据(包含linq写法)

SQL Server Nvarchar(最大值)