Mysql
 sql >> Database >  >> RDS >> Mysql

Mostra tutte le date comprese tra, anche se nessun risultato

Puoi creare un set di risultati automatizzato utilizzando le variabili MySQL per tutte le date che desideri.

select
      AllDaysYouWant.MyJoinDate,
      count( U.User_ID ) as NumberJoined
   from
      ( select
              @curDate := Date_Add(@curDate, interval 1 day) as MyJoinDate
           from
              ( select @curDate := '2012-11-21' ) sqlvars,
              Users
           limit 18 ) AllDaysYouWant
      LEFT JOIN Users U
         on AllDaysYouWant.MyJoinDate = U.User_JoinDate
   group by
      AllDaysYouWant.MyJoinDate

La query interna, mi sto solo collegando alla tabella degli utenti senza chiave, quindi è solo usato per scorrere il numero X di record per rappresentare l'intervallo di giorni desiderato ... Potrebbe essere 30, 100, qualunque cosa ... Solo fintanto che la tabella (in questo caso utenti), ha tutti i record che ti aspetti.

ALLORA, quel risultato di nient'altro che giorni viene unito alla tabella users, ma questa volta, in base a JOIN_DATE dell'utente. Il semplice COUNT() dovrebbe darti ciò che desideri.

"AllDaysYouWant" è l'alias assegnato alla query interna della prima parte di

  ( select
          @curDate := Date_Add(@curDate, interval 1 day) as MyJoinDate
       from
          ( select @curDate := '2012-11-21' ) sqlvars,
          Users
       limit 18 ) AllDaysYouWant

Questo afferma fondamentalmente ... Dalla tabella degli utenti (ma potrebbe essere qualsiasi), dammi 18 righe di dati (tramite limite, ma potrebbe essere quasi un numero qualsiasi di record, ma hai solo bisogno dal 22 novembre al 6 dicembre, che è solo 14 giorni, ma ne ho fatti 18 solo per principio, potrebbe essere quasi tutto. Sopra la tabella Users c'è (select @curDate :='2012-11-21' ) sqlvars. Qualsiasi istruzione select all'interno di una query racchiusa tra parentesi come all'origine della tabella deve essere assegnato un alias e poiché è solo una variabile che userò, non mi interessa quale sia il suo nome.Quindi, questa query avvia la variabile a novembre 21 e il Select @curDate :=Date_Add... bla bla afferma di prendere il valore corrente di @curDate, aggiungere 1 giorno ad esso (ora diventa 22 novembre) e memorizzarlo nella riga restituita "MyJoinDate". Quindi ora, questa query interna crea la tua tabella di sole date che vanno dal 22 novembre inoltra 18 giorni di dati e ha l'alias "AllDaysYouWant" per il resto della query a cui fare riferimento.

Ho modificato la query che probabilmente era quella che hai riscontrato, in alias.field tutto per chiarimenti...