【发布时间】:2022-06-27 22:57:05
【问题描述】:
所以我有一个只包含 2 列的表,一个是 SerialNo,另一个是 TimeStamp。有时该表在不同的时间戳有多个序列条目。我想要的是删除这些多个条目,但只保留一个,即最新记录。
数据示例如下所示:
| SerialNo | TimeStamp | Status |
|---|---|---|
| 1548 | 06/27/2022 12:30 pm | Success |
| 1543 | 06/27/2022 12:32 pm | Success |
| 1432 | 06/27/2022 12:33 pm | Success |
| 1511 | 06/27/2022 12:34 pm | Success |
| 1511 | 06/27/2022 12:45 pm | Success |
| 1511 | 06/27/2022 12:48 pm | Success |
| 1000 | 06/27/2022 12:50 pm | Success |
| 1549 | 06/27/2022 12:51 pm | Success |
| 1435 | 06/27/2022 12:52 pm | Success |
| 1435 | 06/27/2022 12:53 pm | Success |
我想要的是:
| SerialNo | TimeStamp | Status |
|---|---|---|
| 1548 | 06/27/2022 12:30 pm | Success |
| 1543 | 06/27/2022 12:32 pm | Success |
| 1432 | 06/27/2022 12:33 pm | Success |
| 1511 | 06/27/2022 12:48 pm | Success |
| 1000 | 06/27/2022 12:50 pm | Success |
| 1549 | 06/27/2022 12:51 pm | Success |
| 1435 | 06/27/2022 12:53 pm | Success |
我试过玩,但我无法解决这个问题。我已经提到了不同的论坛,但无法找到正确的方法来做到这一点。我目前所做的是完全删除重复的行而不保留最新记录。
我当前的代码是:
DELETE FROM TableName
WHERE SerialNo IN(
SELECT SerialNo FROM
(SELECT SerialNo, ROW_NUMBER() OVER (PARTITION BY [SerialNo] ORDER BY TimeStamp ASC)
AS [ItemNumber] FROM TableName)
a WHERE ItemNumber > 1)
这可能吗?
【问题讨论】:
-
是的,可以做到。但是,让我们澄清一下您使用的数据库:问题标记为 mysql,但查询中使用的语法是针对 ms sql server 或 sqlite。那么,您实际使用的是哪一个?
-
@Shadow 是的,你是对的,我很抱歉。我正在使用 ms sql 服务器
标签: sql-server duplicates