SQL 查询得到跳过某些行处理的工单
SQL Query to get the workorders which skipped some lines processing
因为我不是编写 SQL 查询的专家,所以需要帮助。
我有下面给定的数据集
我需要编写一个查询来获取所有已跳过该过程并移至下一个 seq_no 的 workorderid,例如:
workorderid = AW1 其中有一行 "open" for seq_no=30 并继续到 "complete" for seq_no = 40
最终结果集应如下所示
Workorderid
-----------
AW1
AW3
一种方法简单地使用条件聚合:
select workorderid
from t
group by workorderid
having (max(case when status = 'Open' then seq_no end) <
max(case when status = 'Complete' then seq_no end)
)
也就是最后一个'Open'
后面有没有'Complete'
,根据seq_no
.
这是另一个使用 EXISTS 的方法:
SELECT t1.workorderid
FROM t t1
WHERE t1.status = 'Open'
AND EXISTS
(SELECT 1
FROM t t2
WHERE t2.workorderid = t1.workorderid
AND t2.seq_no > t1.seq_no
AND t2.status = 'Complete')
因为我不是编写 SQL 查询的专家,所以需要帮助。
我有下面给定的数据集
我需要编写一个查询来获取所有已跳过该过程并移至下一个 seq_no 的 workorderid,例如:
workorderid = AW1 其中有一行 "open" for seq_no=30 并继续到 "complete" for seq_no = 40
最终结果集应如下所示
Workorderid
-----------
AW1
AW3
一种方法简单地使用条件聚合:
select workorderid
from t
group by workorderid
having (max(case when status = 'Open' then seq_no end) <
max(case when status = 'Complete' then seq_no end)
)
也就是最后一个'Open'
后面有没有'Complete'
,根据seq_no
.
这是另一个使用 EXISTS 的方法:
SELECT t1.workorderid
FROM t t1
WHERE t1.status = 'Open'
AND EXISTS
(SELECT 1
FROM t t2
WHERE t2.workorderid = t1.workorderid
AND t2.seq_no > t1.seq_no
AND t2.status = 'Complete')