Oracle
 sql >> Baza danych >  >> RDS >> Oracle

SQL -- Wypełnianie dat, które nie dają wyników

W zależności od tego, jak chcesz je utworzyć, możesz utworzyć tablicę kalendarza lub generuj wiersze dynamicznie za pomocą Oracle connect by składnia.

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

Jeśli zejdziesz w dół opcji stołu kalendarzowego, będzie to trochę czystsze:

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

Lub po zauważeniu ograniczeń dat:

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

Dla wszystkich tych polecam indeks na trunc(create_dtime) na twoim player tabeli.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tworzenie wykresu zależności tabeli za pomocą zapytania rekurencyjnego

  2. Nieprawidłowy miesiąc podczas wstawiania danych do Oracle

  3. Procedura tworzenia Oracle wywołująca funkcję

  4. eksportowanie obiektów db do kontroli wersji

  5. używanie wartości oddzielonych przecinkami wewnątrz klauzuli IN dla kolumny NUMBER