sql >> Databáze >  >> RDS >> Oracle

SQL -- Vyplnění dat, která nemají výsledky

V závislosti na tom, jak je chcete vytvořit, můžete buď vytvořit tabulku kalendáře nebo generujte řádky dynamicky pomocí Oracle connect by syntaxe.

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

Pokud přejdete dolů na možnost tabulky kalendáře, je to trochu čistší:

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

Nebo, když jste si právě všimli vašich datových omezení:

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

Pro všechny z nich bych doporučil index na trunc(create_dtime) na vašem player tabulka.




  1. SQLite transakce

  2. Jak získat jednu náhodnou položku z databáze v Django/postgreSQL?

  3. Jak monitorovat výkon PostgreSQL 12 pomocí OmniDB – část 1

  4. Nebyl nalezen vhodný ovladač pro jdbc:oracle:thin:@**** oracle/jdbc/driver/OracleDriver;