Mysql
 sql >> Database >  >> RDS >> Mysql

Come colmare le lacune di data in MySQL?

Dovrai creare una tabella di supporto e riempirla con tutte le date da start a end , quindi solo LEFT JOIN con quella tabella:

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

Fondamentalmente, ciò di cui hai bisogno qui è un file source fittizio.

MySQL è l'unico grande sistema che non ha un modo per generarlo.

PostgreSQL implementa una funzione speciale generate_series per farlo, mentre Oracle e SQL Server può usare la ricorsione (CONNECT BY e ricorsivo CTE s, di conseguenza).