【发布时间】: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 | ... |
+------+-------+--------------------------------------+
我怎样才能划线?非常感谢。
【问题讨论】:
-
请向我们展示您的尝试。
标签: sql sql-server greatest-n-per-group window-functions