2017-08-02 71 views
0

我们有不同的过程,如设计,样品,模拟,凸版印刷,追踪,印刷。但某个工作可以随机做任何工作。 我想选择打印进程,但在此之前,我想检查以前的过程是否已完成。检查上一步如果状态已完成,并显示如果下一步如果完成

我想检查前面的步骤,如果已完成如果完成显示下一个过程。

状态含义:
等于FINISH
等于尚未FINISH

我用下面的查询,但它不会工作。

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

进程表

+-----------+----------+------------+-----------+----------+ 
| 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.

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

+0

可以增加一列,更新它时,服务用户,其订购。 –

+0

“我想选择打印过程,但在此之前我想检查前面的过程是否已经完成。”以前的过程是“追踪”吗?如果是这样,为什么我在查询中看不到? –

+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); 
+0

当有这么多的数据和作业名称**打印**是在不同的步骤号码不是1,它不能找到它只发现步骤值等于1的项目。以下数据samle在https://github.com/Ailyn09/project102/blob/master/process.txt – Ailyn

+0

感谢您的存在,现在我得到了我需要的东西。顺便说一句,我使用'SELECT * FROM process p1 WHERE EXISTS(SELECT * FROM process p2 WHERE p2.processnum = p1.processnum - 1 AND p2.status = 1) AND p1.status = 0 AND p1.jobname = '打印';' – Ailyn

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); 
相关问题