2017-01-27 34 views
0

我有一個列表項目和項目的狀態在多個階段。例如PIPE可以通過切割,焊接,繪畫。表格的設置方式列出了PIPE三次,在STAGE欄下分別有切割,焊接和噴漆。加入表格本身來比較同一列的數據

我想在這一列上比較表與自身的關係,看看這三個階段之間是否存在不一致。

所以如果PIPE仍然處於切割階段,它將顯示該特定行,但是如果PIPE處於焊接階段,它將顯示該特定行。

目前的數據是:

Unique ID  Job #  Stage  Due Date  Status 
120473   Job 12 Cutting 1/17/17  Not Complete 
120473   Job 12 Welding 1/18/17  Not Complete 
120473   Job 12 Painting 1/18/17  Not Complete 
120475   Job 17 Cutting 1/26/17  Complete 
120475   Job 17 Welding 1/27/17  Not Complete 
120475   Job 17 Painting 1/28/17  Not Complete 

所需的輸出將是:

Unique ID  Job #  Stage  Due Date 
120473   Job 12 Cutting 1/17/17 
120475   Job 17 Welding 1/27/17 

唯一ID 120475在切割完畢,所以這就是爲什麼它會顯示焊接代替。

+1

可以改善的問題添加樣本輸入,預期輸出和您嘗試解決問題的方法。 – 1000111

+0

同意@ 1000111。請給我們更多信息 –

+0

添加一些示例輸入@El Tigre – 1000111

回答

1

這裏是我的理解:

希望爲每個unique_id下一不完整階段。你可以解決這個問題

一種方法是使用INNER JOIN

SELECT 
t.* 
FROM t 
INNER JOIN 
(
    SELECT 
    A.unique_id, 
    MIN(COALESCE(B.id, A.id)) AS next_stage_id 
    FROM t A 
    LEFT JOIN t B ON A.unique_id = B.unique_id AND A.id < B.id 
       AND A.status='Complete' AND B.status='Not Complete' 
    GROUP BY A.unique_id 
) AS alias 
ON t.id = alias.next_stage_id; 

這是您的原始問題的簡化版本

SEE DEMO

0

顯然今天是星期五,因爲我一直在想這個。

下解決了我的問題:

select a.jobdescription, a.category, a.sequence, a.lotnumber, a.duedate, a.dpm, a.ps, a.stage, a.completed 

from qiw_powerbi a 

where (a.stage = "approved by client" and a.completed = "not complete") or (a.stage = "released to shop" and a.completed = "not complete") 

group by a.catkey 
order by a.category