我有一个包含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] 删除。
我来说两句