gpt4 book ai didi

SQL:忽略一些返回的行,删除其他行

转载 作者:行者123 更新时间:2023-11-29 11:48:35 24 4
gpt4 key购买 nike

我有这张表:

| Column        | Type                           |
+---------------+--------------------------------+
| id | integer |
| recipient_id | integer |
| is_read | boolean |
| updated_at | timestamp(0) without time zone |

我必须使用此特定规则从该表中删除项目:

  • 对于每个 recipient_id,我们保留 5 个最后阅读的项目,并删除旧的阅读项目。

我试图用 RECURSIVE WITH 语句来改变我的想法,但惨遭失败。我已经以编程方式实现了我的解决方案,但我想知道是否有合适的纯 SQL 解决方案。

最佳答案

DELETE FROM tbl t
USING (
SELECT id, row_number() OVER (PARTITION BY recipient_id
ORDER BY updated_at DESC) as rn
FROM tbl
WHERE is_read
) x
WHERE x.rn > 5
AND x.id = t.id;

JOIN 通常比 IN 表达式更快,尤其是在项目数量较多的情况下。
并使用 row_number(), not rank() !

关于SQL:忽略一些返回的行,删除其他行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12844234/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com