Mysql 从表中选择付款id的“失败”状态记录,该记录在5分钟内未更新任何“成功”状态

Mysql 从表中选择付款id的“失败”状态记录,该记录在5分钟内未更新任何“成功”状态,mysql,sql,datetime,subquery,where-clause,Mysql,Sql,Datetime,Subquery,Where Clause,我有一个包含以下字段的表 付款id、采购id、状态、创建日期、更新日期 一个付款id可以有多个记录。一个付款id可以有多个采购id 对于每个付款id,我需要找到所有状态为“失败”的记录,并且在过去5分钟内没有更新任何与“成功”相同付款id的记录 在加入同一张表后,我尝试了按付款id分组,但未能获得所需的结果。请提供帮助。如果我没有弄错,您可以使用“不存在”: 这会带来失败记录,对于相同的付款id,不存在成功记录,并且在前5分钟内更新了。您可以使用窗口功能进行此操作。一种方法是: select t

我有一个包含以下字段的表 付款id、采购id、状态、创建日期、更新日期

一个付款id可以有多个记录。一个付款id可以有多个采购id

对于每个付款id,我需要找到所有状态为“失败”的记录,并且在过去5分钟内没有更新任何与“成功”相同付款id的记录


在加入同一张表后,我尝试了按付款id分组,但未能获得所需的结果。请提供帮助。

如果我没有弄错,您可以使用“不存在”:


这会带来失败记录,对于相同的付款id,不存在成功记录,并且在前5分钟内更新了。

您可以使用窗口功能进行此操作。一种方法是:

select t.*
from (select t.*,
             sum(status = 'SUCCESS') over (
                 partition by payment_id
                 order by updated_at
                 range between 5 minute preceding and current row
                ) as cnt_success_5
      from t
     ) t
where status = 'FAILURE' and
      cnt_success_5 = 0;

Postgres还是MySQL?这是两个完全不同的数据库示例数据和预期输出将有所帮助。同时发布您的尝试。请分享更多详细信息-如果您已经尝试了一些东西,为什么不分享您的尝试?您好!谢谢你的帮助。你能告诉我怎样才能让我的查询速度更快吗?非常感谢。
select t.*
from (select t.*,
             sum(status = 'SUCCESS') over (
                 partition by payment_id
                 order by updated_at
                 range between 5 minute preceding and current row
                ) as cnt_success_5
      from t
     ) t
where status = 'FAILURE' and
      cnt_success_5 = 0;