如何在SQL Server中保留最新记录并删除旧记录?
我的表有如下order by desc值如何在SQL Server中保留最新记录并删除旧记录?,sql,sql-server,Sql,Sql Server,我的表有如下order by desc值 aaa 12am aaa 11am bbb 12am bbb 11am 我需要删除第2行和第4行并保留最新的一行您可以使用CTE和行编号: ;WITH ToDelete AS ( SELECT ROW_NUMBER() OVER (PARTITION BY name ORDER BY timefield DESC) AS rn FROM mytable ) DELETE FROM ToDelete WHERE rn > 1
aaa 12am
aaa 11am
bbb 12am
bbb 11am
我需要删除第2行和第4行并保留最新的一行您可以使用
CTE
和行编号
:
;WITH ToDelete AS (
SELECT ROW_NUMBER() OVER (PARTITION BY name ORDER BY timefield DESC) AS rn
FROM mytable
)
DELETE FROM ToDelete
WHERE rn > 1
rn=1
标识每个切片的最新记录。对CTE
执行的删除操作将传播到实际表,并删除除最新记录以外的所有内容
编辑:
要仅选择每张幻灯片的最新记录,请使用:
;WITH CTE AS (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY name
ORDER BY timefield DESC) AS rn
FROM mytable
)
SELECT *
FROM CTE
WHERE rn = 1
您可以使用带有
行号的CTE
来执行此操作:
;WITH ToDelete AS (
SELECT ROW_NUMBER() OVER (PARTITION BY name ORDER BY timefield DESC) AS rn
FROM mytable
)
DELETE FROM ToDelete
WHERE rn > 1
rn=1
标识每个切片的最新记录。对CTE
执行的删除操作将传播到实际表,并删除除最新记录以外的所有内容
编辑:
要仅选择每张幻灯片的最新记录,请使用:
;WITH CTE AS (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY name
ORDER BY timefield DESC) AS rn
FROM mytable
)
SELECT *
FROM CTE
WHERE rn = 1
你们有订购专栏吗?像递增ID一样?不只是两列,按描述基于日期排序您有一些排序列吗?像递增ID一样?不只是两列,按desc基于日期排序如果我不想更改表,而是作为查询,我该怎么做output@user3831886,将delete
更改为select
:)什么是“按名称分区”@user3831886您可以将其更改为:partitionby COL1。基本上,您的列名内部有“aaa”和“bbb”值。如果我不想更改表,而是作为查询,我该怎么做output@user3831886,将delete
更改为select
:)什么是“按名称分区”@user3831886您可以将其更改为:partitionby COL1。基本上,您的列名中包含“aaa”和“bbb”值