Da es nicht um explizite Darstellung der Tage geht, sondern nur um die Anzahl, sollte eine Berechnung ohne Hilfdaten möglich sein.
Vorschlag ('2015-03-17' und '2015-03-21' sind durch die Range Parameter zu ersetzen)
Code:
select distinct na.pid,
date('2015-03-21') - date('2015-03-17') -
ifNULL(count_, 0) as DaysWithoutOrder
from torder /* besser tperson*/ na
left join (select pid, count(*) as count_
from (select distinct pid, date(o.ord_datetime)
from torder o
where o.ord_datetime between '2015-03-17'
and '2015-03-21') y
group by pid) x
on na.pid = x.pid
- Selektiere alle pid per Tagesanteil der Order im gewünschten Zeitraum,
- Gruppiere das Ergebnis erneut nach pid und zähle die vorhanden Tage mit Bestellung,
- Joine das Ergebnis mit der Liste aller Personen (um ganz fehlende personen mit einzubeziehen) und verrechne die Tage mit der Anzahl der Tage im Wunschintervall.