我不明白我做错了什么。我试图获得每个符合标准A或标准B的ID的每周COUNT。
select CREATE_WEEK, count ( A.PK )
from TABLE1 A
where ( A.PK not in (select distinct ( B.FK )
from TABLE2 B
where B.CREATE_TIMESTAMP > '01-Jan-2013')
or A.PK in (select A.PK
from ( select A.PK, A.CREATE_TIMESTAMP as A_CRT, min ( B.CREATE_TIMESTAMP ) as FIRST_B
from TABLE1 A, TABLE2 B
where A.PK = B.FK
and A.CREATE_TIMESTAMP > '01-Jan-2013'
and B.CREATE_TIMESTAMP > '01-Jan-2013'
group by A.PK, A.CREATE_TIMESTAMP)
where A_CRT < FIRST_B) )
and A.CREATE_TIMESTAMP > '01-Jan-2013'
and CREATE_WEEK >= 2
and THIS_WEEK - CREATE_WEEK >= 1
group by CREATE_WEEK
order by CREATE_WEEK asc
**注意:table1中的PK =表2中的FK,所以在第一个子查询中,我正在检查table1中的PK是否作为FK存在于table2中。周来自TO_CHAR(TO_DATE(TRUNC(A.CREATE_TIMESTAMP,'IW')),'IW')
当我取出OR并在任一子查询上运行查询时,结果将在1-2秒内返回。但是当我尝试运行组合查询时,20分钟后不会返回结果。
我知道我可以单独运行它们然后在电子表格中对它们进行求和,但我只想得到一个数字。
答案 0 :(得分:0)
我正在尝试获得符合条件A或标准B的每个ID的每周COUNT
但是你的代码是:
ID NOT IN (subquery A) OR ID IN (subquery B)
NOT与您的要求不一致。
假设您的ID符合两个标准,请使用:
ID in (
select ... -- this is subquery A
union
select ... -- this is subquery B)