Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie füllt man Datumslücken in MySQL?

Sie müssen eine Hilfstabelle erstellen und diese mit allen Daten ab start füllen zum end , dann einfach LEFT JOIN mit dieser Tabelle:

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

Im Grunde brauchen Sie hier eine Dummy-Rowsource.

MySQL ist das einzige große System, das keine Möglichkeit hat, es zu generieren.

PostgreSQL implementiert eine spezielle Funktion generate_series um dies zu tun, während Oracle und SQL Server kann Rekursion verwenden (CONNECT BY und rekursives CTE s, entsprechend).