Tùy thuộc vào cách bạn muốn tạo chúng, bạn có thể tạo bảng lịch
hoặc tạo các hàng động bằng cách sử dụng Oracle connect by
cú pháp.
with the_dates as (
select max(trunc(Create_Dtime)) as max_date
, min(trunc(Create_Dtime)) as min_date
from player
)
, generator as (
select min_date + level as the_date
from the_dates
connect by level <= max_date
)
select g.the_date, count(trunc(p.Create_Dtime))
from generator g
left outer join player p
on g.the_date = trunc(p.Create_Dtime)
group by g.the_date
order by g.the_date desc
Nếu bạn đi xuống tùy chọn bảng lịch, nó sẽ gọn gàng hơn một chút:
with the_dates as (
select max(trunc(Create_Dtime)) as max_date
, min(trunc(Create_Dtime)) as min_date
from player
)
select c.the_date, count(trunc(p.Create_Dtime))
from calender c
join the_dates td
on c.the_date between td.min_date and td.max_date
left outer join join player p
on c.the_date = trunc(p.Create_Dtime)
group by c.the_date
order by c.the_date
Hoặc, bạn vừa nhận thấy hạn chế về ngày tháng của mình:
with the_dates as (
select to_date('07-05-2012','dd-mm-yyyy') + level as the_date
from dual
connect by level <= trunc(to_date('07-05-2012','dd-mm-yyyy') - sysdate)
)
select td.the_date, count(trunc(p.create_dtime))
from the_dates td
left outer join player p
on td.the_date = trunc(p.create_dtime)
group by td.the_date
order by td.the_date
Đối với tất cả những điều này, tôi khuyên bạn nên lập chỉ mục trên trunc(create_dtime)
trên player
của bạn bảng.