Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 当主题添加的第一个元素超过提供的限制时,用于删除该元素的查询_Sql_Sqlite_Sql Delete - Fatal编程技术网

Sql 当主题添加的第一个元素超过提供的限制时,用于删除该元素的查询

Sql 当主题添加的第一个元素超过提供的限制时,用于删除该元素的查询,sql,sqlite,sql-delete,Sql,Sqlite,Sql Delete,我有一个5列的表,其中一列是topic。我需要一个查询,该查询将删除我按主题分组时首先添加的行 我有一个id列,它被设置为主键,但是增量虽然都是唯一的,但不可靠,因为数据是用python代码填充的 这是针对SQLite数据库的 DELETE FROM news where topic = "world" 上述查询的一个明显问题是,当topic=world时,它将删除所有内容,我只想删除表中最早添加的内容您可以使用相关子查询。您已经指定了最早的日期,因此我假设有某种类型的日

我有一个5列的表,其中一列是topic。我需要一个查询,该查询将删除我按主题分组时首先添加的行

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

这是针对SQLite数据库的

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。如果您不知道哪个是最早的,则无法删除最早的。信息要么在数据库中,要么不在数据库中。