根据最大值过滤 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 个最新 level
s。如果是这样,您可以像这样使用窗口函数:
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:获取具有附加数据的一系列值之间的最大值