临时表-分组依据-删除-保持前10名

我有一个包含50000条记录的临时表。如果我GROUP BY使用COUNT做一个,它将看起来像这样:

+--------+--------+
|GrpById | Count  |
+--------+--------+
| 1      | 10000  |
| 2      |  8000  |
| 3      | 12000  |
| 4      |  9000  |
| 5      | 11000  |
+--------+--------+

我想删除一些记录,因此从每个ID(1,2,3,4,5)中删除后,我只剩下10条记录。

所以最终,如果我GROUP BY要用COUNT做一个新的,我会得到这样的东西:

+--------+--------+
|GrpById | Count  |
+--------+--------+
| 1      |    10  |
| 2      |    10  |
| 3      |    10  |
| 4      |    10  |
| 5      |    10  |
+--------+--------+

我可以没有它FETCH NEXT吗?

马丁·史密斯

每个组只保留任意10个,您可以使用

WITH CTE AS
(
SELECT *,
       ROW_NUMBER() OVER (PARTITION BY GrpById ORDER BY GrpById) AS RN
FROM YourTable
)
DELETE FROM 
CTE WHERE RN > 10;

ORDER BY如果您需要一些不太随意的东西,请更改

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章