Oracle
 sql >> база данни >  >> RDS >> Oracle

SQL - Попълване на дати, които нямат резултати

В зависимост от това как искате да ги създадете, можете или да създадете календарна таблица или генерирайте редовете динамично с помощта на Oracle connect by синтаксис.

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

Ако отидете надолу в опцията за календарна таблица, това е малко по-чисто:

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

Или, след като току-що забелязахте вашите ограничения за дати:

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

За всички тези бих препоръчал индекс на trunc(create_dtime) на вашия player таблица.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-00933:SQL командата не е приключила правилно при изтриване на две таблици едновременно

  2. 2 начина за форматиране на число с водещи нули в Oracle

  3. ефективен начин за тестване дали съществува ред в таблица

  4. Трябва ли да използвам JDBC getNString() вместо getString()?

  5. Получаване на грешка при извикване на която и да е функция в SQL заявка в пакет без деклариране на функция в спецификацията на пакета