小编Sre*_*ree的帖子

按不同的时间范围按非唯一键对数据进行分组

我在 Oracle 表中有如下数据:

PROJ_NBR     STATUS    START_DT        
AL20         AC        1/14/2010 4:31        
AL20         AC        1/14/2010 4:32        
AL20         AC        1/14/2010 4:32        
AL20         DE        1/14/2010 4:34        
AL20         DE        1/14/2010 4:46        
AL20         DE        1/14/2010 4:46        
AL20         DE        1/14/2010 4:46        
AL20         DE        1/14/2010 4:46        
AL20         DE        1/14/2010 4:46        
AL20         DE        1/14/2010 4:46        
AL20         DE        1/14/2010 4:46        
AL20         DE        1/14/2010 4:46        
AL20         DE        1/14/2010 4:46        
AL20         DE        1/14/2010 4:46        
AL20         AC        3/4/2010 4:31        
AL20         AC        3/4/2010 4:39        
AL20         AC        3/21/2010 13:24        
AL20         AC        2/4/2011 13:54        --year changes …
Run Code Online (Sandbox Code Playgroud)

oracle group-by gaps-and-islands

6
推荐指数
1
解决办法
670
查看次数

查询调优帮助

编辑- drachenstern:有关此问题的更多信息以及以下查询来源,请参阅此问题:

按不同的时间范围按非唯一键对数据进行分组

有人可以为以下查询建议一些调整选项吗?为一个项目运行时速度很快,但对于所有记录,完成运行需要数小时。PA 表中的 NUM_ROWS:2,101,528

我想按不同的时间范围按非唯一键对数据进行分组

SELECT project_nbr, status, MIN(aud_timestamp) start_dt, end_dt 
FROM (
    SELECT a.project_nbr
         , status
         , aud_timestamp
         , ( SELECT MAX(p.aud_timestamp) 
             FROM pa p 
             WHERE p.project_nbr = a.project_nbr 
               AND p.status = a.status 
               AND p.aud_timestamp >= a.aud_timestamp
               AND NOT EXISTS (
                            SELECT NULL 
                            FROM pa q
                            WHERE q.project_nbr = p.project_nbr 
                              AND q.status <> p.status 
                              AND q.aud_timestamp < p.aud_timestamp 
                              AND q.aud_timestamp > a.aud_timestamp
                               )
            ) end_dt
     FROM pa a
     )
GROUP BY project_nbr, status, end_dt
Run Code Online (Sandbox Code Playgroud)

query oracle-11g-r2

5
推荐指数
1
解决办法
435
查看次数

SQL 中的 EXISTS 子句

我有以下要求:main_set表包含所有 ID,user_input表包含所有用户输入的 ID。

我想要 user_input 表中存在的 id 的结果。如果 user_input 表中没有任何内容,那么我想要 main_input 表中的所有 id。

这是我到目前为止所拥有的:

create table main_set as
select 1 id from dual
union all
select 2 from dual
union all
select 3 from dual

create table user_input as
select 1 id from dual
union all
select 2 from dual

select *
  from main_set ms
  where exists (select null
                        from user_input ui
                       where ui.id = ms.id)
Run Code Online (Sandbox Code Playgroud)

oracle

5
推荐指数
1
解决办法
847
查看次数

光标:引脚 S 在 11g 中等待 X

这是我们数据库中排名前 5 的等待事件之一,尽管等待的次数不多,但我们将其视为潜在威胁,我们希望找到根本原因和解决方案。任何建议将不胜感激..

DB 版本:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64 位生产

AWR:

Top 5 Timed Foreground Events
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                                                           Avg
                                                          wait   % DB
Event                                 Waits     Time(s)   (ms)   time Wait Class
------------------------------ ------------ ----------- ------ ------ ----------
DB CPU                                            3,887          95.0
db file sequential read             207,505         125      1    3.1 User I/O
direct path read                     33,793          69      2    1.7 User I/O
cursor: pin S wait on X                   5          43   8650    1.1 Concurrenc
db file scattered read               34,229          39      1     .9 …
Run Code Online (Sandbox Code Playgroud)

oracle oracle-11g

3
推荐指数
1
解决办法
5179
查看次数