sql - 删除单个用户除最早的 20 行以外的所有行

标签 sql postgresql

假设我有一个包含列的表:

id, username, createdat(timestamp).

如何删除单个用户的所有行,最旧的 20 行除外?

所以基本上其他用户的行应该保持不变。

我知道下面的代码是错误的,但仍然想分享我目前所拥有的。欢迎任何意见或建议。

SELECT 
    *
FROM
    tableA
WHERE
    NOT EXISTS( SELECT 
            *
        FROM
            tableA
        WHERE
            username = 'abcdefg'
        ORDER BY id ASC
        LIMIT 20)

最佳答案

你很接近。

DELETE FROM
  tableA
WHERE
  id NOT IN(
    SELECT 
        id
    FROM
        tableA
    WHERE
        username = 'abcdefg'
    ORDER BY createdat ASC LIMIT 20)
  AND
    username = 'abcdefg'

关于sql - 删除单个用户除最早的 20 行以外的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41971912/

相关文章:

php - MySQL + PHP : select count group by day and user

MySQL 产品配对

php - 条件计数 MySQL

postgresql - sqlalchemy,违反外键约束

postgresql - 如何在启用 TLS 配置的情况下连接到 Traefik TCP 服务?

sql - 通过数据库中的文本字段实现智能搜索

sql - 在 SQL WHERE 子句中转义问号 (?)

postgresql - PostgreSQL COPY 命令中动态生成的表名

database - 如何更改 Postgres 的维护数据库?

sql - 将 varchar 转换为 bool 值