PostgreSQL:删除除最近日期以外的所有日期

PostgreSQL: Delete all but most recent date

我有一个 table 定义如下:

CREATE TABLE contracts (
  ContractID TEXT DEFAULT NULL,
  ContractName TEXT DEFAULT NULL,
  ContractEndDate TIMESTAMP WITHOUT TIME ZONE,
  ContractPOC TEXT DEFAULT NULL
);

在这个table中,一个ContractID可能有不止一条记录,对于每个ContractID,我想删除所有记录,但具有最新ContractEndDate的记录。我知道如何在 MySQL 中使用:

DELETE contracts
  FROM contracts
  INNER JOIN (
    SELECT
      ContractID,
      ContractName,
      max(ContractEndDate) as lastDate,
      ContractPOC
    FROM contracts
    GROUP BY EmployeeID
    HAVING COUNT(*) > 0) Duplicate on Duplicate.ContractID = contracts.ContractID
    WHERE contracts.ContractEndDate < Duplicate.lastDate;

但我需要帮助才能在 PostgreSQL 中运行它。

你可以用这个

delete 
from 
    contracts c
using (SELECT
          ContractID,
          max(ContractEndDate) as lastDate
        FROM 
            contracts
        GROUP BY 
            ContractID) d
where
    d.ContractID = c.ContractID
    and c.ContractEndDate < d.lastDate;