Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Abfrage, die Leerzeichen hinzufügt, um die Lücken zu füllen

Eine Lösung besteht darin, die Daten mit einer Unterabfrage zu generieren und diese Unterabfrage dann mit Ihrer Tabelle zu verknüpfen.

Wenn Sie nur die letzten 7 Tage benötigen, können Sie es hiermit versuchen:

select d.testdate, coalesce(t.val1,0), coalesce(t.val2,0)
from
  (select current_date as testdate
   union all select current_date - interval 1 day
   union all select current_date - interval 2 day
   union all select current_date - interval 3 day
   union all select current_date - interval 4 day
   union all select current_date - interval 5 day
   union all select current_date - interval 6 day) d
  left join tblMyData t
  on d.testdate = t.testdate

Wenn Sie anstelle von current_date die letzten 7 Tage in der Tabelle haben möchten, kann Ihre Abfrage so aussehen:

select m.m - interval d day, coalesce(t.val1,0), coalesce(t.val2,0)
from
  (select max(testdate) as m from tblMyData) m
  cross join
  (select 0 as d
   union all select 1
   union all select 2
   union all select 3
   union all select 4
   union all select 5
   union all select 6) d
  left join tblMyData t
  on m.m - interval d day = t.testdate

Bitte sehen Sie sich hier eine Geige an .