Выберите последний раздел из интервала - PullRequest
0 голосов
/ 27 июня 2018

У меня есть таблица с интервальным разделом.

    CREATE TABLE interval_tab (
  id           NUMBER,
  code         VARCHAR2(10),
  description  VARCHAR2(50),
  created_date DATE
)
PARTITION BY RANGE (created_date)
INTERVAL (NUMTODSINTERVAL(1, 'day'))
(
   PARTITION part_01 values LESS THAN (TO_DATE('01-NOV-2017','DD-MON-YYYY'))
);

Данные загружаются в эту таблицу каждый день в новом разделе, и мне нужно выбрать данные из последнего раздела. Как мне запросить данные из последнего раздела?

Спасибо!

1 Ответ

0 голосов
/ 27 июня 2018

Oracle должен иметь возможность определять используемый раздел на основе предиката вашего запроса. Если вы выбрали данные только за текущий день, Oracle должен сделать что-то вроде этого:

create table test_data (
   id           NUMBER,
   code         VARCHAR2(10),
   description  VARCHAR2(50),
   created_date      DATE default sysdate not null
)
PARTITION BY RANGE (created_date)
INTERVAL(NUMTODSINTERVAL(1, 'day'))
(
   PARTITION part_01 values LESS THAN (TO_DATE('20180627','YYYYMMDD'))
);

insert into test_data values (1,'A','A code',sysdate-3);
insert into test_data values (1,'B','B code',sysdate-2);
insert into test_data values (1,'C','C code',sysdate-1);
insert into test_data values (1,'D','D code',sysdate);
insert into test_data values (1,'E','E code',sysdate);

commit;

select * from test_data
where created_date >= trunc(sysdate);

Выход:

ID  CODE    DESCRIPTION CREATED_DATE
1   D   D code  6/27/2018 9:11:07 AM
1   E   E code  6/27/2018 9:11:07 AM

Объясните план выглядит так:

Plan
SELECT STATEMENT  ALL_ROWS
Cost: 4  Bytes: 168  Cardinality: 3         
    2 PARTITION RANGE ITERATOR  
    Cost: 4  Bytes: 168  Cardinality: 3  Partition #: 1  Partitions determined by Key Values    
        1 TABLE ACCESS FULL TABLE TEST_DATA 
        Cost: 4  Bytes: 168  Cardinality: 3  Partition #: 1  Partitions determined by Key Values

Вы также можете добавить индексы (локальные или глобальные) в зависимости от вашей ситуации и потребностей.

Примечание : Вы также можете использовать предложение «partition for» для выбора данных из раздела, не зная его имени (особенно полезно при интервальном разбиении). Например:

select * from test_data partition for (to_date('20180627','YYYYMMDD'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...