oracle计数记录每日加入
甲骨文12c大师 我很难获得多个表的每日记录计数。我认为查询的基础应该是日历。我已经创建了一个日历,如下所示: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
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;