我有两个表:ITEM(ID,GROUP)和STATE(ID,STATE)
我需要的是一个SQL查询,它返回组中的所有项目,前一项的状态从“完成”更改为“打开”。之前的项目被定义为同一组中ID最小的项目。
在示例中,我希望Id = 2作为结果,因为它在组'A'中,而前一项Id = 1的项目处于'完成'状态。
我尝试了很多方法,但我完全陷入困境......
答案 0 :(得分:1)
一种方法使用exists
。这几乎是您的问题陈述的直接翻译:
select i.*
from items i join
state s
on i.id = s.id
where s.state = 'OPEN' and
exists (select 1
from items i2 join
states s2
on i2.id = s2.id
where s2.state = 'DONE' and i2.grp = i.grp and s2.id < s.id
);
唯一棘手的部分是需要join
在外部查询和子查询中将表格组合在一起。