我有一个表格,可以分阶段列出项目和项目的状态。例如,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中完成,这就是为什么它会显示焊接。
答案 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;
这是原始问题的简化版
答案 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