用python在SQLite数据库中删除行,其中有两个条件



我是python和SQLite的新手,希望你能帮助我。我想弄清楚如何删除一行在SQLite数据库中,我有两个条件。

我的代码大致如下:

a.execute("""Create Table xxx (
Data,
ID,
Date)""")
a.execute("Insert into xxx values (?, ?, ?)", (data, ID , date)""")

我的问题是,大量的数据进入数据库和ID是不明确的。如果有两个以上的数据集具有相同的ID,我想只保留最新日期的那个)

我用下面的代码试了试:

a.execute ("""delete from xxx
where date not in(
Select max(date) from xxx
group by ID

但问题是,它没有删除任何东西,可能是因为每个日期都在那里。

你能帮帮我吗?

您可以更新查询以检查行日期是否不等于最大结果。此外,您应该更新子查询,使其只包含id与主删除查询中的id相同的行:

delete from xxx t1 
where t1.date != (select max(t2.date) from xxx t2 where t2.id = t1.id)

您可以使用EXISTS:

DELETE FROM xxx AS x1
WHERE EXISTS (SELECT 1 FROM xxx AS x2 WHERE x2.ID = x1.ID AND x2.Date > x1.Date)

查看一个简化的演示。

最新更新