Mysql使用匹配的外键在前一行上联接

Mysql使用匹配的外键在前一行上联接,mysql,join,relational-database,Mysql,Join,Relational Database,我有一张这样的桌子: |id|jobid|statusid| ... other irrelevant rows... |1 |123 | 1 | |2 |321 | 2 | |3 |123 | 2 | |4 |321 | 3 | |5 |123 | 3 | 由于一些不幸的用户错误,当策略在状态2之后使用状态4时,他们在大约500个作业上使用了状态3 如果statusid中的值为3,那么当一行与前一行之间的距离不确定时,如何将该行连接

我有一张这样的桌子:

|id|jobid|statusid| ... other irrelevant rows...
|1 |123  | 1      |
|2 |321  | 2      |
|3 |123  | 2      |
|4 |321  | 3      |
|5 |123  | 3      |
由于一些不幸的用户错误,当策略在状态2之后使用状态4时,他们在大约500个作业上使用了状态3

如果statusid中的值为3,那么当一行与前一行之间的距离不确定时,如何将该行连接到与列jobid中的值匹配的前一行?目标是更新该表,以便无论ID之间的距离如何,具有相同jobid的2后面的任何3都将更改为4

我想要的输出是连接第4行和第2行以及第5行和第3行。 我知道这个示例始终是id-2,但在我的数据库中并非如此

到目前为止,这种关系将是

SELECT mt.id, mt3.id
FROM mytable mt
INNER JOIN (SELECT MAX(mt1.id) AS mid, mt1.jobid
                    FROM mytable mt1
                    WHERE mt1.id < mt.id
                    GROUP BY mt1.jobid) mt2
    ON mt2.jobid = mt.jobid
INNER JOIN mytable tm3
    ON mt3.id=mt2.mid
        AND mt3.statusid = 2
WHERE mt.statusid=3
但是子查询中的行正在读取 其中sh1.id 我如何才能让这个查询工作


谢谢大家!

您可以使用相关子查询和另一个连接连接到上一行。以下内容将两条记录放在同一行上:

select t.*, tprev.*
from (select t.*,
             (select t2.id
              from mytable t2
              where t2.jobid = t.jobid and t2.id < t.id
              order by t2.id desc
              limit 1
             ) as prev_id
      from mytable t
     ) t left join
     mytable tprev
     on t.id = tprev.prev_id;

可以使用相关子查询和另一个联接连接到上一行。以下内容将两条记录放在同一行上:

select t.*, tprev.*
from (select t.*,
             (select t2.id
              from mytable t2
              where t2.jobid = t.jobid and t2.id < t.id
              order by t2.id desc
              limit 1
             ) as prev_id
      from mytable t
     ) t left join
     mytable tprev
     on t.id = tprev.prev_id;

必须在左连接之前添加一个t才能让mysql运行代码。最后总是让它在同一行上连接1将连接1,2连接2等。尝试切换到tprev,从几千行的表中获得了数亿个结果,因此可能也不正确。也许只是时间晚了,我筋疲力尽,错过了一些显而易见的事情?谢谢必须在左连接之前添加一个t才能让mysql运行代码。最后总是让它在同一行上连接1将连接1,2连接2等。尝试切换到tprev,从几千行的表中获得了数亿个结果,因此可能也不正确。也许只是时间晚了,我筋疲力尽,错过了一些显而易见的事情?谢谢