SQl从表中删除前100名

SQl从表中删除前100名,sql,Sql,我正在尝试删除表中的所有项,但最近的3000项除外。该表有105000条记录 我正在尝试此操作,但由于语法错误而生成错误 delete tRealtyTrac where creation in( select top 103000 from tRealtyTrac order by creation) 内部查询需要是: 从…中选择top 103000 creation,这是一种非常简单的方法: 按创建说明从tRealtyTrac订单中选择top 3001 获取最后一个日期,然后删除创建的tR

我正在尝试删除表中的所有项,但最近的3000项除外。该表有105000条记录

我正在尝试此操作,但由于语法错误而生成错误

delete tRealtyTrac where creation in( select top 103000 from tRealtyTrac order by creation)

内部查询需要是:


从…

中选择top 103000 creation,这是一种非常简单的方法:

按创建说明从tRealtyTrac订单中选择top 3001

获取最后一个日期,然后删除创建的tRealtyTrac<'thedateyoufound'

但是安迪也有一个好主意。
;

删除语法将与现有语法略有不同。例如:

DELETE FROM tRealtyTrac
WHERE creation in( select top 103000 creation from tRealtyTrac order by creation)
注意from关键字是如何存在的。这表示我们要从名为tRealtyTrac的表中删除

我预见到的一个问题是,你可能不想使用创作

相反:

DELETE FROM tRealtyTrac
WHERE someuniqueidcolumnlikeakeyofsomesort in( select top 103000 someuniqueidcolumnlikeakeyofsomesort from tRealtyTrac order by creation)
否则,您可能会删除超出预期的内容。

请尝试以下操作:

DELETE FROM tRealtyTrac WHERE creation IN (SELECT top 103000  * FROM tRealtyTrac ORDER by creation)

您忘记了tRealtyTrac中的字段,我用星号选择了所有字段,但您可以列出它们,也可以只列出一个。您还忘记了FROM子句。

至于我,CTE是有序删除的更好解决方案

;WITH records_delete AS (
    select top 103000 creation 
    from tRealtyTrac 
    order by creation)
DELETE records_delete 

在103001和103000成员中的创建可以相同。我会选择top PK ID并在其中进行检查。谢谢大家-我使用了这个命令结合您的答案删除tRealtyTrac,其中ID在按Creation从tRealtyTrac order中选择top 103000 ID中这是正确的。非常感谢。将Brian的答案标记为正确,因为提供了完整的语法和解释。您的语句失败,因为不能在tRealtyTrac的所有属性中创建。虽然你提到必须改变星号,但这句话给了读者错误的认识。难道没有人注意到105000减去103000等于2000吗?他说我正试图删除表中除最近3000项以外的所有项目。他正要删除比他想要的多1000条记录。