现有一张log表,记录每个产品在每一道工序的通过情况,如下:
id sn process status
1 001 p1 pass
2 001 p2 fail
3 001 p2 fail
4 001 p2 pass
5 001 p3 fail
6 001 p3 pass
7 001 p4 fail
p1,p2,p3,p4代表工序,工序个数不固定,001这个产品在p2工序失败了两次,第三次成功;在p3工序失败一次,第二次成功;在p4工序失败。
现在的需求是:根据sn查询该表,每个工序只显示最新一条记录,且中间工序失败的不显示。
得到类似于如下的结果:
id sn process status
7 001 p4 fail
6 001 p3 pass
4 001 p2 pass
1 001 p1 pass
请各位大牛帮帮忙,感激!
SQL
------解决方案--------------------
SELECT *
FROM TB A
WHERE NOT EXISTS(SELECT 1 FROM TB B WHERE A.sn = B.sn AND A.id < b.id AND A.process = b.process)
and A.sn = '001' --加上你的条件即可。