sql >> Databáze >  >> RDS >> Mysql

Jak vyplnit mezery v datech v MySQL?

Budete muset vytvořit pomocnou tabulku a vyplnit ji všemi daty od start do end , pak stačí LEFT JOIN s tou tabulkou:

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

V podstatě to, co zde potřebujete, je fiktivní zdroj řádků.

MySQL je jediný hlavní systém, kterému chybí způsob, jak jej generovat.

PostgreSQL implementuje speciální funkci generate_series k tomu, zatímco Oracle a SQL Server může používat rekurzi (CONNECT BY a rekurzivní CTE s).



  1. Jak oříznout řetězce v SQL

  2. Nejlepší způsob, jak pravidelně spouštět dotazy Oracle

  3. Jak přidat omezení primárního klíče do sloupců identity do všech tabulek v databázi SQL Server - SQL Server / Výukový program TSQL, část 63

  4. Vytváření a nasazení více verzí databáze prostřednictvím snímků schématu