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

Mic*_*ver 2 postgresql delete-row

我有一个像这样定义的表:

CREATE TABLE contracts (
  ContractID TEXT DEFAULT NULL,
  ContractName TEXT DEFAULT NULL,
  ContractEndDate TIMESTAMP WITHOUT TIME ZONE,
  ContractPOC TEXT DEFAULT NULL
);
Run Code Online (Sandbox Code Playgroud)

在这个表中,一个 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;
Run Code Online (Sandbox Code Playgroud)

但是我需要帮助才能在 PostgreSQL 中工作。

Pha*_*ach 6

你可以用这个

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;
Run Code Online (Sandbox Code Playgroud)