【发布时间】:2022-01-16 06:01:16
【问题描述】:
我有一张简单的桌子:
Create Table data
(
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Price Int,
Date date,
Tmstmp date
)
用值填充表:
INSERT INTO data (PersonID, LastName, FirstName, Price, date, Tmstmp)
VALUES (1, 'John', 'Snow', 100, '2020-04-08', '2020-01-01 10:34:09.000');
INSERT INTO data (PersonID, LastName, FirstName, Price, date, Tmstmp)
VALUES (2, 'Tony', 'Stark', 100, '2020-05-10', '2020-01-01 11:34:09.000');
INSERT INTO data (PersonID, LastName, FirstName, Price, date, Tmstmp)
VALUES (3, 'Tony', 'Stark', 120, '2021-12-11', '2020-01-01 12:34:09.000');
INSERT INTO data (PersonID, LastName, FirstName, Price, date, Tmstmp)
VALUES (4, 'Tony', 'Stark', 125, '2021-12-11', '2020-01-01 13:34:09.000');
目标是仅保留日期最近的值。但仅当日期重复时。
这样托尼·斯塔克就会有 2 条记录,有 2 个日期。具有相同日期2021-12-11 和最旧时间戳的重复行将被删除。
所以记录将如下所示:
我尝试在表上进行自联接,但无法正常工作。也尝试使用 ROW_NUMBER 但我对 Partition By 的工作方式感到困惑。对实现我的目标的任何帮助将不胜感激。
我尝试过但没有成功
DELETE FROM data d1
INNER JOIN data d2
ON d1.personID = d2.personID
AND d1.Date = d2.Date
WHERE d1.Tmstmp < d2.Tmstmp
【问题讨论】:
-
请标记您的特定数据库
-
我其实用的是sqliteonline.com,所以数据库无关
-
怎么样?看起来这支持几种不同的 RDBMS inc mysql、Postgres 和 Sql Server,那么它有什么不相关的?
标签: sql duplicates