我有一个表格,该表格由DATE
列d_dly_label
分区并编入索引。
我正试图了解这对max(d_dly_label)
的影响。为什么它会为以下两个查询生成不同的值:
查询1:
select
max(d_dly_label)
from
ECP.TSPT105
where
d_dly_label <= to_date('12/06/2015', 'dd/mm/yyyy');
--result: 13/JUL/14
查询2:
select
max(d_dly_label)
from
ECP.TSPT105
where
d_dly_label <= to_date('12/06/2015', 'dd/mm/yyyy')
and d_dly_label >= to_date('12/06/2015', 'dd/mm/yyyy') - 1;
--result: 11/JUN/15
如何将更多条件添加到where子句会导致更高 max(d_dly_label)
?
更新:我从SQL Developer中获取了DDL并将其缩减为一个复制问题的简短示例。
drop table tmp_105_copy;
CREATE TABLE tmp_105_copy
(
D_DLY_LABEL DATE NOT NULL
)
PARTITION BY LIST (D_DLY_LABEL)
(
PARTITION JUL2014_13 VALUES (TO_DATE(' 2014-07-13 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
, PARTITION JUN2015_11 VALUES (TO_DATE(' 2015-06-11 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
);
CREATE INDEX tmp_I1_TSPT105 ON tmp_105_copy(D_DLY_LABEL ASC)
LOCAL
(
PARTITION JUL2014_13
, PARTITION JUN2015_11
);
insert into tmp_105_copy values (to_date('13jul2014','ddmonyyyy'));
insert into tmp_105_copy values (to_date('11jun2015','ddmonyyyy'));
commit;
select
max(d_dly_label)
from
tmp_105_copy
where
d_dly_label <= to_date('12/06/2015', 'dd/mm/yyyy');
-- 13/JUL/14
analyze table tmp_105_copy estimate statistics;
select
max(d_dly_label)
from
tmp_105_copy
where
d_dly_label <= to_date('12/06/2015', 'dd/mm/yyyy');
-- still 13/JUL/14
select
max(d_dly_label)
from
tmp_105_copy
where
d_dly_label <= to_date('12/06/2015', 'dd/mm/yyyy')
and d_dly_label >= to_date('12/06/2015', 'dd/mm/yyyy') - 1;
--11/JUN/15
select
max(to_date(d_dly_label))
from
tmp_105_copy
where
d_dly_label <= to_date('12/06/2015', 'dd/mm/yyyy');
-- also 11/JUN/15
答案 0 :(得分:0)
也许这是表格中的索引字段?如果统计数据错误,则可能会出现此类错误结果。您可以尝试更新表的统计信息并再次检查您的查询。