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,从几千行的表中获得了数亿个结果,因此可能也不正确。也许只是时间晚了,我筋疲力尽,错过了一些显而易见的事情?谢谢