sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo llenar los espacios en blanco en MySQL?

Deberá crear una tabla de ayuda y completarla con todas las fechas desde start para end , luego simplemente LEFT JOIN con esa mesa:

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

Básicamente, lo que necesita aquí es un origen de fila ficticio.

MySQL es el único sistema principal que carece de una forma de generarlo.

PostgreSQL implementa una función especial generate_series para hacer eso, mientras que Oracle y SQL Server puede usar recursividad (CONNECT BY y recursivo CTE s, en consecuencia).