Tsql 如何将一个表缩减到50000条记录的前5000条
我有一个相当大的表,包含50000条记录,我想把它减少到5000条。如何编写SQL查询来删除其他45000条记录。基本表结构包含datetime的列 我想要查询的大致情况如下Tsql 如何将一个表缩减到50000条记录的前5000条,tsql,Tsql,我有一个相当大的表,包含50000条记录,我想把它减少到5000条。如何编写SQL查询来删除其他45000条记录。基本表结构包含datetime的列 我想要查询的大致情况如下 DELETE FROM mytable WHERE countexceeded(5000) ORDER BY filedate DESC; 我可以用C写这篇文章#以某种方式抓取行索引号并围绕它做一些工作,但是有没有一种整洁的方法可以做到这一点?如果表的顺序正确: DELETE FROM mytable LIMIT 500
DELETE FROM mytable WHERE countexceeded(5000) ORDER BY filedate DESC;
我可以用C写这篇文章#以某种方式抓取行索引号并围绕它做一些工作,但是有没有一种整洁的方法可以做到这一点?如果表的顺序正确:
DELETE FROM mytable LIMIT 5000
如果没有,并且表格已正确排序自动增量索引:
吵架
SELECT id, filedate FROM mytable LIMIT 1, 50000;
保存id,然后删除
DELETE FROM mytable WHERE id >= @id;
如果排序不正确,您可以使用filedate而不是id,但如果它是一个没有时间的日期,您可能会从同一日期删除不需要的行,因此请小心使用filedate删除解决方案
DELETE TOP(45000) FROM mytable ORDER BY filedate ASC;
将顺序更改为升序,以相反的顺序获取行,然后删除顶部的45000行
希望这有帮助
编辑:-
我为无效的语法道歉。这是我的第二次尝试
DELETE FROM myTable a INNER JOIN
(SELECT TOP(45000) * FROM myTable ORDER BY fileDate ASC) b ON a.id = b.id
如果您没有唯一的列,请使用Martin Smith的CTE答案 您接受的答案的语法无效,因为不允许使用
ORDER BY
子句。你可以用
;WITH T AS
(
SELECT TOP 45000 *
FROM mytable
ORDER BY filedate
)
DELETE FROM T
谢谢你。刚注意到今天早上出门前,应该仔细检查一下东西。