将表连接到自己以比较同一列的数据

时间:2017-01-27 19:50:18

标签: mysql

我有一个表格,可以分阶段列出项目和项目的状态。例如,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在Cutting中完成,这就是为什么它会显示焊接。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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