sql >> Database >  >> RDS >> Mysql

MySQL-query die lege plekken toevoegt om de gaten te vullen

Een oplossing is om de datums te genereren met een subquery en deze subquery vervolgens samen te voegen met uw tabel.

Als je alleen de laatste 7 dagen nodig hebt, kun je dit proberen:

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

als u in plaats van de huidige_datum de laatste 7 dagen in de tabel wilt hebben, dan kan uw vraag als volgt zijn:

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

Zie een viool hier .



  1. Tips voor back-upbeheer voor TimescaleDB

  2. Entity Framework Core 2.0:de abstracte basisklasse eenmalig configureren

  3. Met Laravel Migration, hoe verander je het gegevenstype van een kolom en werk je de bestaande gegevens bij om in het nieuwe gegevenstype te passen, zonder onbewerkte SQL-query's te gebruiken?

  4. Tel inhoud in jaarmaandarchief met behulp van PHP