2017-08-02 69 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); 
相關問題