Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como preencher lacunas de data no MySQL?


Você precisará criar uma tabela auxiliar e preenchê-la com todas as datas de start para end , então apenas LEFT JOIN com essa tabela:
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

Basicamente, o que você precisa aqui é uma fonte de linha fictícia.

MySQL é o único grande sistema que não tem uma maneira de gerá-lo.

PostgreSQL implementa uma função especial generate_series para fazer isso, enquanto Oracle e SQL Server pode usar recursão (CONNECT BY e recursiva CTE s, em conformidade).