Sql 当主题添加的第一个元素超过提供的限制时,用于删除该元素的查询
我有一个5列的表,其中一列是topic。我需要一个查询,该查询将删除我按主题分组时首先添加的行 我有一个id列,它被设置为主键,但是增量虽然都是唯一的,但不可靠,因为数据是用python代码填充的 这是针对SQLite数据库的Sql 当主题添加的第一个元素超过提供的限制时,用于删除该元素的查询,sql,sqlite,sql-delete,Sql,Sqlite,Sql Delete,我有一个5列的表,其中一列是topic。我需要一个查询,该查询将删除我按主题分组时首先添加的行 我有一个id列,它被设置为主键,但是增量虽然都是唯一的,但不可靠,因为数据是用python代码填充的 这是针对SQLite数据库的 DELETE FROM news where topic = "world" 上述查询的一个明显问题是,当topic=world时,它将删除所有内容,我只想删除表中最早添加的内容您可以使用相关子查询。您已经指定了最早的日期,因此我假设有某种类型的日
DELETE FROM news where topic = "world"
上述查询的一个明显问题是,当topic=world时,它将删除所有内容,我只想删除表中最早添加的内容您可以使用相关子查询。您已经指定了最早的日期,因此我假设有某种类型的日期/时间列包含以下信息:
DELETE FROM news n
WHERE n.topic = 'world' AND
n.datetimecol = (SELECT MIN(n2.datetimecol)
FROM news n2
WHERE n2.topic = n.topic
);
如果没有,您可以使用自动递增的主键。和其他回答者所说的一样,必须有日期时间列。您可以按如下方式基于它使用“不存在”:
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);
没有时间列,所有数据几乎同时输入。那么有没有其他的方法来做这件事,或者我必须在里面放一些时间栏。@rishi。如果现有id是自动递增的,您可以使用它。由于一些奇怪的python问题,它似乎没有按顺序自动递增,但我想我可以在其中找到最小的数字,因为根据我的要求,它不必非常精确。@rishi。如果您不知道哪个是最早的,则无法删除最早的。信息要么在数据库中,要么不在数据库中。