0

我不明白我做错了什么。我正在尝试获取满足标准 A 或标准 B 的每个 ID 的每周计数。

  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 = table2 中的 FK,所以在第一个子查询中,我正在检查 table1 中的 PK 是否作为 FK 在 table2 中存在。周来自 TO_CHAR (TO_DATE (TRUNC (A.CREATE_TIMESTAMP, 'IW')), 'IW')

当我取出 OR 并对任一子查询运行查询时,结果将在 1-2 秒内返回。但是当我尝试运行组合查询时,20 分钟后没有返回结果。

我知道我可以单独运行它们,然后将它们汇总到电子表格中,但我宁愿只得到一个数字。

4

1 回答 1

0

我正在尝试获取符合标准 A 或标准 B 的每个 ID 的每周计数

但是您的代码是:

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)
于 2013-09-25T08:56:53.363 回答