sql >> Databasteknik >  >> RDS >> Mysql

MySQL-fråga som lägger till tomrum för att fylla luckorna

En lösning är att generera datumen med en underfråga och sedan sammanfoga denna underfråga med din tabell.

Om du bara behöver de senaste 7 dagarna kan du prova med detta:

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

om du istället för aktuellt_datum vill ha de senaste 7 dagarna i tabellen, kan din fråga vara så här:

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

Se en fiol här .



  1. SQL Server 2008 - Krympa transaktionsloggen - Något sätt att automatisera?

  2. Använda MySQL för att beräkna saldon från debeter och krediter i en enda tabell

  3. Hur fixar jag MySQL 8 felkoder:1525 och 1292?

  4. Mysql - Hjälp mig att ändra denna sökfråga för att få önskat resultat