首页 > 解决方案 > 如何找到状态为 9 但仍没有状态 10 的数据

问题描述

select slog.filename, doc.d , doc.sap_id
from document_state doc, serv_log slog
where
  doc.exeid = slog.exeid
  and doc.timestamp < TRUNC(SYSDATE) - 1
  and doc.timestamp> TRUNC(SYSDATE) - 55
  and doc.document_status = 9
  and slog.exeid not in (
    select exeid from document_state 
    where document_status >= 10
  )
group by
  slog.strs_filename,
  doc.sys_id, 
  doc.sap_id;

我写了这个查询来查找状态为 9 而没有状态 10 的数据,但是我执行了我的查询并且花了很长时间,有什么想法可以加快这个查询

标签: sqloracle

解决方案


一个having子句不是做你想要的吗?

select l.filename, d.sysid, d.sap_id
from document_state d
inner join serv_log l on d.exeid = l.exeid
where
    d.timestamp < trunc(sysdate) - 1
    and d.timestamp> trunc(sysdate) - 55
    and d.document_status in (9, 10)
group by s.strs_filename, d.sys_id, d.sap_id
having max(d.document_status) = 9

注意我doc.dselect子句中用替换了doc.sysid,所以子句和select子句是一致的group by


推荐阅读