【发布时间】:2021-12-30 21:02:46
【问题描述】:
我有一张这样的桌子:
架构 (MySQL v5.7)
CREATE TABLE likethis
(`id` int, `userid` int, `date` DATE)
;
INSERT INTO likethis
(`id`, `userid`, `date`)
VALUES
(1, 1, "2021-11-15"),
(2, 2, "2021-11-15"),
(3, 1, "2021-11-13"),
(4, 3, "2021-10-13"),
(5, 3, "2021-09-13"),
(6, 2, "2021-09-13");
| id | userid | date |
|---|---|---|
| 1 | 1 | 2021-11-15 |
| 2 | 2 | 2021-11-15 |
| 3 | 1 | 2021-11-13 |
| 4 | 3 | 2021-10-13 |
| 5 | 3 | 2021-09-13 |
| 6 | 2 | 2021-09-13 |
我想删除所有超过 14 天的记录,除非用户只有更旧的记录 - 而不是为该用户保留“最新”(最大“id”)行。
该操作后的预期目标应为:
| id | userid | date |
|---|---|---|
| 1 | 1 | 2021-11-15 |
| 2 | 2 | 2021-11-15 |
| 3 | 1 | 2021-11-13 |
| 4 | 3 | 2021-10-13 |
即:用户 ID 1 仅在过去 14 天内有记录:保留所有记录。用户 ID 在过去 14 天内有记录,因此删除所有超过 14 天的记录。用户 ID 3 只有“旧”记录,即超过 14 天 - 因此只保留这些记录中最新的一条,即使它超过 14 天。
我想到了一个类似于子查询的自我加入,我按用户 ID 分组......但无法真正做到......
【问题讨论】: