Vous devrez créer une table d'assistance et la remplir avec toutes les dates depuis le start
pour end
, puis juste LEFT JOIN
avec ce tableau :
SELECT d.dt AS date,
COUNT(*) AS total,
SUM(attitude = 'positive') AS positive,
SUM(attitude = 'neutral') AS neutral,
SUM(attitude = 'negative') AS negative
FROM dates d
LEFT JOIN
messages m
ON m.posted_at >= d.dt
AND m.posted_at < d.dt + INTERVAL 1 DAYS
AND spam = 0
AND duplicate = 0
AND ignore = 0
GROUP BY
d.dt
ORDER BY
d.dt
Fondamentalement, ce dont vous avez besoin ici est une source factice.
MySQL
est le seul système majeur qui ne dispose pas d'un moyen de le générer.
PostgreSQL
implémente une fonction spéciale generate_series
pour ce faire, tandis que Oracle
et SQL Server
peut utiliser la récursivité (CONNECT BY
et CTE
récursif s, en conséquence).