选择ID IN或b中的计数(ID)

时间:2013-09-23 15:48:20

标签: sql oracle count database-performance

我不明白我做错了什么。我试图获得每个符合标准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分钟后不会返回结果。

我知道我可以单独运行它们然后在电子表格中对它们进行求和,但我只想得到一个数字。

1 个答案:

答案 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)