oracle计数记录每日加入

oracle计数记录每日加入,oracle,join,calendar,Oracle,Join,Calendar,甲骨文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 DML脚本: INSERT INTO &quo

甲骨文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
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, EQUIPMENT_TYPE, LOCATION, SALE_DATE) VALUES ('9', 'Jaguars', 'coventry', TO_DATE('2020-08-05 00:00:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO "CARS1" (COUNT_CARS, EQUIPMENT_TYPE, LOCATION, SALE_DATE) VALUES ('7', 'Rovers', 'leamington', TO_DATE('2020-08-04 00:00:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO "CARS1" (COUNT_CARS, EQUIPMENT_TYPE, LOCATION, SALE_DATE) VALUES ('10','Trans Am', 'leamington', TO_DATE('2020-08-30 00:00:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO "CARS1" (COUNT_CARS, EQUIPMENT_TYPE, LOCATION, SALE_DATE) VALUES ('8', 'Rovers', 'coventry', TO_DATE('2020-08-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO "CARS1" (COUNT_CARS, EQUIPMENT_TYPE, LOCATION, SALE_DATE) VALUES ('4', 'Rovers', 'leamington', TO_DATE('2020-08-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS'));
COMMIT;


INSERT INTO "CARS2" (COUNT_CARS, EQUIPMENT_TYPE, LOCATION,SALE_DATE) VALUES ('8', 'Rovers', 'coventry', TO_DATE('2020-08-02 00:00:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO "CARS2" (COUNT_CARS, EQUIPMENT_TYPE, LOCATION, SALE_DATE) VALUES ('9', 'Jaguars', 'coventry', TO_DATE('2020-08-02 00:00:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO "CARS2" (COUNT_CARS, EQUIPMENT_TYPE, LOCATION, SALE_DATE) VALUES ('7', 'Rovers', 'leamington', TO_DATE('2020-08-03 00:00:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO "CARS2" (COUNT_CARS, EQUIPMENT_TYPE, LOCATION, SALE_DATE) VALUES ('10','Trans Am', 'leamington', TO_DATE('2020-08-03 00:00:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO "CARS2" (COUNT_CARS, EQUIPMENT_TYPE, LOCATION, SALE_DATE) VALUES ('8', 'Rovers', 'coventry', TO_DATE('2020-08-03 00:00:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO "CARS2" (COUNT_CARS, EQUIPMENT_TYPE, LOCATION, SALE_DATE) VALUES ('4', 'Rovers', 'leamington', TO_DATE('2020-08-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS'));
COMMIT;
我可以简单地从一个表中获得汽车数量,而不使用日历作为结果的基础,但我不知道如何将日历日作为基础,并连接多个表以从该表中获得每天的汽车数量,比如说,添加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;

谢谢你提出了一个棘手的问题-解决格式问题很有趣

很抱歉,我做了格式设置。只需检查是否一切正常谢谢,抱歉,我不知道这一点我知道我可以在没有日历的情况下获得1个表的结果:选择truncsale\u日期,从cars1 group by truncsale\u date order by truncsale\u date desc;我知道,我想我会挑战自己,但我不知道该如何应对。我知道这对很多用户都有帮助-谢谢你Ekochergin。我正在尝试逻辑我正在获取ora错误-预期数量在sumcount上获取时间戳_cars@Gilly,您在另一个表上尝试,而不是在问题中的表上,对吗?我使用的是一个更大的表中的日期格式“yyy-MM-DD HH24:MI:SS”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;