|
谢谢@newkid版主回复,针对你的建议:
我用代码复述一遍,看是否正确,
在创建物化视图的时候可以先建表CREATE TABLE AS SELECT,然后在表上面创建一个ON PREBUILT TABLE的物化视图,此时这个物化视图就是一个自动刷新的壳子,这个物化视图的SELECT语句可以和建表语句稍微不同,把 "SYSDATE 修改时间" 变成 "TO_DATE(NULL) 修改时间"
然后在这个物化视图上创建一个触发器来设置这个修改时间。
不要把月日分开存放,直接存日期,输出的时候再转换成月日。
--源数据表
CREATE TABLE TEST (ID VARCHAR2(32),DATEs DATE,a NUMBER);
--插入源数据
insert into test (ID, DATES, A) values ('50201281', to_date('01-01-2015', 'dd-mm-yyyy'), 1);
insert into test (ID, DATES, A)values ('50201281', to_date('02-01-2015', 'dd-mm-yyyy'), 2);
insert into test (ID, DATES, A)values ('50201281', to_date('03-01-2015', 'dd-mm-yyyy'), 3);
insert into test (ID, DATES, A)values ('50201281', to_date('01-01-2016', 'dd-mm-yyyy'), 4);
insert into test (ID, DATES, A)values ('50201281', to_date('02-01-2016', 'dd-mm-yyyy'), 5);
insert into test (ID, DATES, A)values ('50201281', to_date('03-01-2016', 'dd-mm-yyyy'), 6);
insert into test (ID, DATES, A)values ('50201281', to_date('01-01-2017', 'dd-mm-yyyy'), 7);
insert into test (ID, DATES, A)values ('50201281', to_date('02-01-2017', 'dd-mm-yyyy'), 8);
insert into test (ID, DATES, A)values ('50201281', to_date('03-01-2017', 'dd-mm-yyyy'), 9);
insert into test (ID, DATES, A)values ('50201282', to_date('01-01-2011', 'dd-mm-yyyy'), 10);
insert into test (ID, DATES, A)values ('50201282', to_date('02-01-2011', 'dd-mm-yyyy'), 11);
insert into test (ID, DATES, A)values ('50201282', to_date('03-01-2011', 'dd-mm-yyyy'), 12);
insert into test (ID, DATES, A)values ('50201282', to_date('01-01-2016', 'dd-mm-yyyy'), 13);
insert into test (ID, DATES, A)values ('50201282', to_date('02-01-2016', 'dd-mm-yyyy'), 14);
insert into test (ID, DATES, A)values ('50201282', to_date('03-01-2016', 'dd-mm-yyyy'), 15);
insert into test (ID, DATES, A)values ('50201282', to_date('01-01-2017', 'dd-mm-yyyy'), 16);
insert into test (ID, DATES, A)values ('50201282', to_date('02-01-2017', 'dd-mm-yyyy'), 17);
insert into test (ID, DATES, A)values ('50201282', to_date('03-01-2017', 'dd-mm-yyyy'), 18);
然后建一个新表test01
CREATE TABLE test01 AS
SELECT id 序号,
to_char(dates, 'mm') 月,
to_char(dates, 'dd') 日,
AVG(a) a均值,
MIN(to_char(dates, 'YYYY')) 开始年份,
MAX(to_char(dates, 'YYYY')) 结束年份,
MAX(to_char(dates, 'YYYY')) - MIN(to_char(dates, 'YYYY'))+1 间隔年份,
' null' 备注,
TO_DATE(NULL) 修改时间 这个地方有按你说的修改
FROM test
GROUP BY id, to_char(dates, 'mm'), to_char(dates, 'dd')
然后创建物化视图
create materialized view test01 on prebuilt table as select * from test01;
这一步就报错了。。ORA-32349,
然后在这个物化视图上创建一个触发器来设置这个修改时间。
不要把月日分开存放,直接存日期,输出的时候再转换成月日。
这两句怎么实施啊?谢谢回复! |
|