首页 > 解决方案 > 当主题超过提供的限制时,查询删除主题的第一个添加元素

问题描述

我有一个有 5 列的表,其中一列是topic。我需要一个查询,当我按主题对它进行分组时,它将删除我首先添加的行(最旧的) 。

我有一个 id 列,它被设置为主键,但是增量(虽然它都是唯一的)不可靠,因为数据被我的 python 代码填充的方式。

这是一个 SQLite 数据库

DELETE FROM news where topic = "world" 

上述查询的明显问题是它会删除所有内容topic = world,我只想删除表中最旧的添加

标签: sqlsqlitesql-delete

解决方案


您可以使用相关子查询。您已经指定了“最旧的”,所以我假设有某种类型的日期/时间列包含这些信息:

DELETE FROM news n
    WHERE n.topic = 'world' AND
          n.datetimecol = (SELECT MIN(n2.datetimecol)
                           FROM news n2
                           WHERE n2.topic = n.topic
                          );

如果没有,您可以使用自动递增的主键。


推荐阅读