sqlite3:单个语句删除除最新的n条记录之外的所有记录,其中id ='foo'

时间:2013-06-21 20:14:16

标签: python sql sqlite

我正在努力克服Python中的sqlite。这就是让我难过的原因。

给定数据结构:

id archiveSeconds archiveSize
-- -------------- -----------
13 1234567        100
34 1234568        100
13 1234568        100
24 1234570        100

...

我想根据archiveSeconds删除除最近n个特定ID的n条记录,并保留所有其他记录的完整性。

我能想出的最接近的是:

delete from Archives where id='13' not in (select id from Archives order by archiveSeconds desc limit 15);

但这会清空所有记录的表格。我想我需要嵌套几个select语句才能做到这一点,但是我在sql语句中迷失了以完成这项工作。

1 个答案:

答案 0 :(得分:1)

两个变化。首先,您不想比较子查询中的id,您想要比较时间。其次,您希望过滤给定id的子查询:

delete from Archive
     where id='13' and
           ArchiveSeconds not in (select ArchiveSeconds
                                  from Archives
                                  where id = '13'
                                  order by archiveSeconds desc
                                  limit 15);

我注意到一个表名为Archive,另一个表名为Archives。这来自您的原始查询。