Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Qual é a maneira mais direta de preencher datas vazias nos resultados do sql (no final do mysql ou do perl)?


Quando você precisa de algo assim no lado do servidor, geralmente cria uma tabela que contém todas as datas possíveis entre dois pontos no tempo e, em seguida, junta-se à esquerda nesta tabela com os resultados da consulta. Algo assim:
create procedure sp1(d1 date, d2 date)
  declare d datetime;

  create temporary table foo (d date not null);

  set d = d1
  while d <= d2 do
    insert into foo (d) values (d)
    set d = date_add(d, interval 1 day)
  end while

  select foo.d, count(date)
  from foo left join table on foo.d = table.date
  group by foo.d order by foo.d asc;

  drop temporary table foo;
end procedure

Neste caso em particular, seria melhor colocar uma pequena verificação no lado do cliente, se a data atual não for anterior+1, coloque algumas strings de adição.