Python sqlite-根据条件筛选出重复行

Python sqlite-根据条件筛选出重复行,python,sqlite,Python,Sqlite,我有一个看起来像这样的数据集 id,timestamp,source,action,data_id 1,<time in ms>,external,add,1257 2,<time in ms>,internal,update,1134 3,<time in ms>,external,remove,1257 4,<time in ms>,external,add,1259 我要做的是运行一个SELECT查询,并获取操作为“添加”的所有行,操作为“

我有一个看起来像这样的数据集

id,timestamp,source,action,data_id
1,<time in ms>,external,add,1257
2,<time in ms>,internal,update,1134
3,<time in ms>,external,remove,1257
4,<time in ms>,external,add,1259
我要做的是运行一个SELECT查询,并获取操作为“添加”的所有行,操作为“删除”的行除外


在上面的数据集中,查询SELECT*FROM table,其中action='add'将返回第1行和第4行。我想过滤掉第1行,因为在第3行中它有删除操作。任何帮助都将不胜感激。

尝试使用现有逻辑:

选择id、时间戳、源、操作、数据\u id 从您的表t1 哪里 操作='add'和 不存在从表t2中选择1 其中t2.data\u id=t1.data\u id和 t2.行动=‘移除’;
以通俗易懂的英语阅读,上述查询将返回每个数据id的所有记录,前提是同一数据id中不存在一条操作为“删除”的记录。

您可以使用MAX window函数执行此操作:

select id,timestamp,source,action,data_id
from (
  select *, max(action = 'remove') over (partition by data_id) flag
  from tablename
  where action in ('add', 'remove')
)
where flag = 0
看。 结果:


除非至少有一条记录的操作是删除,否则此操作有效,但如果没有包含“删除”操作的记录,则不会返回任何结果。我不同意,当每个组都没有删除记录时,它应返回所有记录。我创建了一个虚拟数据库,其中记录包含“添加”或“更新”操作。没有记录具有删除操作。当我运行这个查询时,我没有得到任何结果。你能把演示链接粘贴到这里吗?我的错!我在WHERE子句后缺少action='add'
> id | timestamp    | source   | action | data_id
> -: | :----------- | :------- | :----- | ------:
>  4 | <time in ms> | external | add    |    1259