sql - 删除最旧的重复项并按时间戳保留最新的重复项
问题描述
我有一个查询如下:
;WITH Duplicates AS
(
SELECT *, ROW_NUMBER() OVER (PARTITION BY ChannelName, SerialNumber, ReadingDate ORDER BY ChannelName) AS Rownumber
FROM [Staging].[UriData]
)
DELETE FROM Duplicates WHERE Rownumber > 1
--AND ROWNUMBER >=< ???
OPTION (MAXRECURSION 0)
这很好用,可以在表中找到重复项。但是,该表经常使用更正的数据进行更新。
到查询运行时,可能已经有三个或更多更新。
这意味着我想删除除最新记录之外的所有记录。表中有一个时间戳字段,表示最近一次插入发生的时间。我假设我应该使用此字段来确定哪一行是最新行,而任何不是最高行号的行,都将其删除。这是正确的方法吗?
TIA
解决方案
当然,您可以使用timestamp
column with ROW_NUMBER()
& 您不需要使用递归提示,因为您CTE
没有任何递归级别。
;WITH Duplicates AS (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY ChannelName, SerialNumber, ReadingDate ORDER BY timestamp DESC) AS Rownumber
FROM [Staging].[UriData]
)
DELETE d
FROM Duplicates d
WHERE Rownumber > 1;
推荐阅读
- amazon-web-services - 使用 cloudfron 在 s3 存储桶多个环境中托管静态站点
- nginx - 重定向IP:端口到域名
- javascript - HTML 不显示为 DIV
- ios - 您可以从外部 url 打开已安装的 PWA 吗?
- flutter - 如何在颤动条纹 gpay 集成中获取付款人电子邮件?
- vue.js - 顶点图表线不显示
- c# - 如何将对象列表映射到包含多个列表的对象?
- c# - 创建侦听 TCP 消息和 HTTP 请求的 .NET Core 工作器服务
- android - 在 android 上对我的 sd 卡进行分区时遇到问题
- python-3.x - 将 paho MQTT 与 Python 中的另一个异步进程相结合