我有两个名为Item and Inspection的数据库表。物品有很多检查。基本上,对物品进行检查,检查记录其“未破坏”与“破碎”的状态。对每个项目进行定期检查。
我想为Items表中名为“last_broken_at”的每条记录更新一个新添加的字段。需要将其更新为在该项目的最旧相关检验中找到的“已创建”日期时间,其中检验“状态”字段等于“已损坏”。
虽然通过单个MySQL更新语句肯定可以实现,但这里需要注意:
如果某个项目在某个时刻被修复并且检查发现该项目“未被破坏”,但后来发现该项目再次被“破坏”,则该项目的“last_broken_at”字段必须更新为“已创建”日期时间在检查状态“未破坏”后状态“被破坏”的检查。
基本上,Items表中的“last_broken_at”字段必须对其名称为true,它必须确实是我们知道Item从“not broken”变为“broken”的最接近的时间。
以下是表格的样子:
项目表
检查
谢谢!
答案 0 :(得分:0)
尝试:
UPDATE items t
SET t.last_broke_at = (
SELECT min(created)
FROM inspections t1
WHERE t.item_id=t1.item_id
AND status='broken'
AND NOT EXISTS (
SELECT *
FROM inspections t2
WHERE t1.item_id = t2.item_id
AND t2.created> t1.created
AND t2.status = 'not broken'
)
)