检查上一步如果状态已完成并显示下一个过程如果完成

时间:2017-08-02 10:27:38

标签: mysql sql select

我们有不同的流程,例如设计,样品,模拟,凸版印刷,追踪,印刷。但是某项工作可以随意做任何工作。 我想选择打印流程,但在此之前我想检查之前的流程是否已经完成。

如果已完成显示下一个过程,我想检查上一步。

状态含义:
1 等于结束
0 等于 NOT YET FINISH

我使用以下查询,但它无法正常工作。

SELECT *
FROM process
WHERE status = 0
AND (SELECT * FROM process WHERE step=step-1 AND status=1)

PROCESS TABLE

+-----------+----------+------------+-----------+----------+
|    ID     | Job Code |  Job Name  |   Step    |  Status  |
+-----------+----------+------------+-----------+----------+
| 1         | J0003    | Designing  | 0         | 1        |
| 2         | J0003    | Sample     | 1         | 1        |
| 3         | J0003    | Printing   | 2         | 0        |
+-----------+----------+------------+-----------+----------+

结果:

+-----------+----------+------------+-----------+----------+
| 3         | J0003    | Printing   | 2         | 0        |
+-----------+----------+------------+-----------+----------+

这应该是结果,因为第一步和第二步已经完成。完成,为什么因为行status的值为1.

如果第二个进程 Sample 的状态值等于0,则结果为空或显示为空。

2 个答案:

答案 0 :(得分:2)

如果您使用合格的列名,我怀疑您的查询会执行您想要的操作:

SELECT p.*
FROM process p
WHERE p.status = 0 AND
      EXISTS (SELECT 1 FROM process p2 WHERE p2.step = p.step - 1 AND p2.status = 1);

答案 1 :(得分:0)

试试这个

SELECT p1.*
FROM process p1 WHERE p1.status = 0 AND
     p1.id not in (SELECT p2.id FROM process p2 WHERE p2.step = p1.step - 1 AND p2.status = 1);