我可以根据温度 table 删除 rows/replace table

Can I delete rows/replace table based on temp table

此代码为我提供了 table 个唯一值(不重复):

SELECT id, firstname, lastname, startdate, position
FROM  (
   SELECT id, firstname, lastname, startdate, position,
     ROW_NUMBER() OVER (PARTITION BY (firstname, lastname) ORDER BY startdate DESC) rn
   FROM people
   ) tmp
WHERE rn = 1;

什么语法可以用这个语法的结果替换当前的 table?

或者,我可以使用 WHERE rn <> 1 来获取我想要删除的所有数据,但同样,我正在努力使用此方法正确获取 DELETE 的语法。

假设 firstnamelastnamestartdate 中的值永远不会是 NULL,这个带有 NOT EXISTS 反半连接的简单查询会工作:

DELETE FROM people AS p
WHERE  EXISTS (
   SELECT FROM people AS p1
   WHERE  p1.firstname = p.firstname
   AND    p1.lastname  = p.lastname
   AND    p1.startdate > p.startdate
   );

它删除存在 较新 副本的每一行,有效地保留每组对等点的最新行。 (当然,(firstname, lastname)是一种很差的身份建立方式,同名的人很多,demo可能会简化...)

startdate中可以有相同的值吗?那么你需要一个决胜局...

通常比使用带有 row_number() 的子查询更快。有一百零一种方法可以加快速度,具体取决于您的具体情况和要求。参见:

  • How do I (or can I) SELECT DISTINCT on multiple columns?

如果比较的列可以是 NULL,请考虑:

  • How to delete duplicate rows without unique identifier

. Combine it with 有一个完整的专用标签来缩小范围: