查询在主题超过提供的限制时删除第一个添加的元素

Query to delete first added element by a topic when it exceeds provided limit

我有一个包含 5 列的 table,其中一列是 topic。我需要一个查询,当我 group 时,它将 delete 我首先添加的行(oldest)主题。

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

这是一个 SQLite 数据库

DELETE FROM news where topic = "world" 

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

您可以使用相关子查询。您指定了“最旧”,所以我假设有某种类型的 date/time 列包含以下信息:

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

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

和其他回答者说的一样,一定要有date_time栏。您可以基于它使用不存在,如下所示:

DELETE FROM news n
    WHERE n.topic = 'world'
      AND not exists
         (SELECT 1 FROM news nn
           WHERE nn.topic = n.topic
             AND nn.datetimecol < n.datetimecol);