暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 具有分区的分析函数中的奇怪行为

ASKTOM 2019-09-25
187

问题描述

您好,我遇到了无法理解的奇怪行为。

我有这张表

CREATE TABLE test_table
    (id                             NUMBER(10,0) NOT NULL,
    register_date                  DATE DEFAULT sysdate NOT NULL,
    row_id                         NUMBER(10,0) NOT NULL,
    journal_col_id                 NUMBER(10,0) NOT NULL)
复制


-- TEST_TABLE的索引

CREATE INDEX idx_test_table_row_id ON test_table
  (
    "ROW_ID" DESC
  )
NOPARALLEL
LOGGING
复制


CREATE INDEX idx_test_table_col_id ON test_table
  (
    journal_col_id  ASC
  )
NOPARALLEL
LOGGING
复制


有以下记录:
INSERT INTO test_table 
VALUES(13376,TO_DATE('2017-02-22 09:00:07', 'YYYY-MM-DD HH24:MI:SS'),1276,154);
INSERT INTO test_table 
VALUES(11969,TO_DATE('2017-02-13 09:54:35', 'YYYY-MM-DD HH24:MI:SS'),1276,153);
INSERT INTO test_table 
VALUES(11970,TO_DATE('2017-02-13 09:54:40', 'YYYY-MM-DD HH24:MI:SS'),1276,132);
INSERT INTO test_table 
VALUES(11971,TO_DATE('2017-02-13 09:55:16', 'YYYY-MM-DD HH24:MI:SS'),1276,133);
INSERT INTO test_table 
VALUES(11975,TO_DATE('2017-02-13 09:56:49', 'YYYY-MM-DD HH24:MI:SS'),1276,133);
INSERT INTO test_table 
VALUES(11961,TO_DATE('2017-02-13 09:53:57', 'YYYY-MM-DD HH24:MI:SS'),1276,124);
INSERT INTO test_table 
VALUES(11962,TO_DATE('2017-02-13 09:53:57', 'YYYY-MM-DD HH24:MI:SS'),1276,134);
INSERT INTO test_table 
VALUES(11963,TO_DATE('2017-02-13 09:54:01', 'YYYY-MM-DD HH24:MI:SS'),1276,125);
INSERT INTO test_table 
VALUES(11964,TO_DATE('2017-02-13 09:54:16', 'YYYY-MM-DD HH24:MI:SS'),1276,126);
INSERT INTO test_table 
VALUES(11965,TO_DATE('2017-02-13 09:54:22', 'YYYY-MM-DD HH24:MI:SS'),1276,127);
INSERT INTO test_table 
VALUES(11966,TO_DATE('2017-02-13 09:54:25', 'YYYY-MM-DD HH24:MI:SS'),1276,128);
INSERT INTO test_table 
VALUES(11967,TO_DATE('2017-02-13 09:54:30', 'YYYY-MM-DD HH24:MI:SS'),1276,129);
复制



以下两个查询返回不同的结果:

SELECT id, 
       max(register_date) over (PARTITION BY row_id, journal_col_id) max_date      
  FROM test_table  
复制


标识最大值 _ 日期
-
13376 22-2月-2017 09:00:07
11969 22-2月-2017 09:00:07
11970 22-2月-2017 09:00:07
11971 22-2月-2017 09:00:07
11975 22-2月-2017 09:00:07
11967 22-2月-2017 09:00:07
11962 22-2月-2017 09:00:07
11963 22-2月-2017 09:00:07
11964 22-2月-2017 09:00:07
11965 22-2月-2017 09:00:07
11966 22-2月-2017 09:00:07
11961 22-2月-2017 09:00:07


SELECT id,       
       max(register_date) over (PARTITION BY journal_col_id,  row_id ) max_date
  FROM test_table  
复制


标识最大值 _ 日期
-
11961 13-2月-2017 09:53:57
11963 13-2月-2017 09:54:01
11964 13-2月-2017 09:54:16
11965 13-2月-2017 09:54:22
11966 13-2月-2017 09:54:25
11967 13-2月-2017 09:54:30
11970 13-2月-2017 09:54:40
11971 13-2月-2017 09:56:49
11975 13-2月-2017 09:56:49
11962 13-2月-2017 09:53:57
11969 13-2月-2017 09:54:35
13376 22-2月-2017 09:00:07


我发现原因是索引,但是为什么,我无法解释。

产品版本: 甲骨文数据库11g版本11.2.0.4.0-64位生产
在LiveSQL我不能重复这个。

专家解答

是的,这看起来像一只虫子。

但它在12.1中如预期的那样工作。因此,如果这对您造成重大问题,则看起来像是升级的好借口 :)
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论