Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment combler les lacunes de date dans MySQL ?

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).