2017-01-27 31 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