我有一个 SQL 表(Postgres):
CREATE TABLE (
"id" BIGINT NOT NULL PRIMARY KEY,
"changedAt" TIMESTAMP NOT NULL,
"familyId" VARCHAR(12) NOT NULL,
... (other columnds left out for clarity)
)
我们正在此表中获取大量更新(记录),并且希望仅保留不超过 90 天的更新(记录)。诀窍是,如果“familyId”自 90 天以来没有任何更新,我们需要保留最新的旧 ID。如果 90 天内有更新,这也适用。
对于以下数据:
1, 2024-04-12 13:20:23, "Test 1", ...
2, 2024-03-12 13:20:23, "Test 1", ...
3, 2024-01-01 13:20:23, "Test 1", ...
4, 2022-01-12 13:20:23, "Test 1", ...
3 和 4 都超过 90 天,但我希望保留第 3 个以完整覆盖过去 90 天的数据。
如何构建 DELETE 查询来实现此目的? 哪些索引可以帮助查询更快?
我自己不知道如何处理这种情况。
尝试这样的事情(只需纠正语法,它可能已损坏)
delete from table1 where id in
(
select id from (
select id, familyId, row_number over (partition by familyId order by changedAt desc) as rn
where changedAt < dateadd("day",now(), -90)
) q1 where rn <> 1
)