sql >> Database >  >> RDS >> Mysql

Hoe datumgaten in MySQL op te vullen?

U moet een hulptabel maken en deze vullen met alle datums vanaf start om te end , dan gewoon LEFT JOIN met die tafel:

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

Kortom, wat je hier nodig hebt, is een dummy rowsource.

MySQL is het enige grote systeem dat geen manier heeft om het te genereren.

PostgreSQL implementeert een speciale functie generate_series om dat te doen, terwijl Oracle en SQL Server kan recursie gebruiken (CONNECT BY en recursieve CTE s, dienovereenkomstig).



  1. MySQLdb van Python kan libmysqlclient.dylib niet vinden met Homebrewed MySQL

  2. Van Opgeslagen procedure, retourneer OUT-parameter &OUT-cursor &ontleden resultaat (Oracle)

  3. Hoe tel je alle rijen bij gebruik van SELECT met LIMIT in MySQL-query?

  4. MySQL-bestel berichten op meest recente opmerking OF laatst gepost