如何解决根据最大值过滤SQL Server数据
我有一个像这样的SQL Server 2008表:
+------+-------+--------------------------------------+
| id | level | content |
+------+-------+--------------------------------------+
| 1 | 1 | ... |
| 2 | 2 | ... |
| 1 | 2 | ... |
| 1 | 3 | ... |
| 2 | 1 | ... |
| 1 | 4 | ... |
| 3 | 1 | ... |
+------+-------+--------------------------------------+
对于每个id,它可能具有上表中保存的三个,两个或四个级别。如何获取每个ID的数据:
- 每个id在最终表中最多具有三个记录
- 如果一个id的最大级别高于3,则这三个记录的级别是从max到max-3;
- 如果一个id的最大级别等于或小于3,则保持它们不变。
所以我想得到的决赛桌是:
+------+-------+--------------------------------------+
| id | level | content |
+------+-------+--------------------------------------+
| 1 | 1 | ... |
| 2 | 2 | ... |
| 1 | 2 | ... |
| 1 | 3 | ... |
| 2 | 1 | ... |
| 3 | 1 | ... |
+------+-------+--------------------------------------+
我如何排队?非常感谢。
解决方法
我认为您希望每level
最近3个id
如果是这样,您可以使用如下窗口功能:
select *
from (
select t.*,row_number() over(partition by id order by level desc) rn
from mytable t
) t
where rn <= 3
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。