sql - 从区间分区中选择最新的分区
问题描述
我有一个有间隔分区的表。
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'))
);
数据每天都在新分区中加载到该表中,我需要从最新分区中选择数据。如何查询以获取最新分区中的数据?
谢谢!
解决方案
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'));
推荐阅读
- vue.js - 文本输出到 VUE 中的控制台
- jquery - 需要一个带有输入的 HTML5 Canvas 的 XY 坐标的 if 语句
- r - 从不同样本的两个回归中找到回归的 beta
- ajax - admin-ajax.php 偶尔返回 404 状态码
- javascript - 在 setTimeout 中调用的函数不使用当前的 React 状态
- python - 在 TensorFlow 中使用正则化和量化图
- angular - Angular 7 动态可注入模板
- linux - 在进行额外循环时
- mysql - 如何在 MySQL 中更改 SHOW GRANTS 标题?
- c# - Newtonsoft.Json filtering output