如何解决甲骨文计数记录每日加入
专家(Oracle 12c) 我很难获取多个表的每日记录计数。我认为查询的基础应该是日历。我已经创建了一个日历,如下所示:
with calendar as(select rownum -1 as day from dual
connect by rownum < sysdate - TO_DATE('2020-08-01')+1)
select to_date('2020-08-01')+ day as sale_date from calendar
源表:
CREATE TABLE "CARS1"
( "COUNT_CARS" NUMBER(10,0),"EQUIPMENT_TYPE" VARCHAR2(100 BYTE),"LOCATION" VARCHAR2(500 BYTE),"SALE_DATE" DATE)
SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS" ;
CREATE TABLE "CARS2"
( "COUNT_CARS" NUMBER(10,"SALE_DATE" DATE)
SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS" ;
DML脚本:
INSERT INTO "CARS1" (COUNT_CARS,EQUIPMENT_TYPE,LOCATION,SALE_DATE) VALUES ('8','Rovers','coventry',TO_DATE('2020-08-05 00:00:00','YYYY-MM-DD HH24:MI:SS'));
INSERT INTO "CARS1" (COUNT_CARS,SALE_DATE) VALUES ('9','Jaguars',SALE_DATE) VALUES ('7','leamington',TO_DATE('2020-08-04 00:00:00',SALE_DATE) VALUES ('10','Trans Am',TO_DATE('2020-08-30 00:00:00',TO_DATE('2020-08-01 00:00:00',SALE_DATE) VALUES ('4','YYYY-MM-DD HH24:MI:SS'));
COMMIT;
INSERT INTO "CARS2" (COUNT_CARS,TO_DATE('2020-08-02 00:00:00','YYYY-MM-DD HH24:MI:SS'));
INSERT INTO "CARS2" (COUNT_CARS,TO_DATE('2020-08-03 00:00:00','YYYY-MM-DD HH24:MI:SS'));
COMMIT;
我可以简单地从1个表中获得汽车的数量,而无需使用日历作为结果的基础,但是我不知道如何将日历日作为基础,并加入多个表以获取每日计数该表中的汽车数量(比如说添加40张桌子,以获取每一天相对于每天的每日计数)。
结果如下:
#SALE_DATE # cars1 cars2
2020-08-01 12 4
2020-08-02 0 17
2020-08-03 0 25
2020-08-04 7 0
2020-08-05 17 0
解决方法
就像我一开始想的那样,任务似乎有点困难。这样才能获得所需的结果
with calendar as(select level + to_date('2020-08-01','yyyy-mm-dd') - 1 day
from dual
connect by level + to_date('2020-08-01','yyyy-mm-dd') < to_date('2020-09-01','yyyy-mm-dd')),c1_sales as (select sale_date,sum(count_cars) count_cars from cars1 group by sale_date),c2_sales as (select sale_date,sum(count_cars) count_cars from cars2 group by sale_date)
select c.day,nvl(t1.count_cars,0),nvl(t2.count_cars,0)
from calendar c,c1_sales t1,c2_sales t2
where t1.sale_date(+) = c.day
and t2.sale_date(+) = c.day
order by c.day;
感谢一个棘手的问题-解决起来很有趣
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。