sql >> Database teknologi >  >> RDS >> Mysql

Hvordan udfylder man datohuller i MySQL?

Du skal oprette en hjælpetabel og udfylde den med alle datoer fra start til end , og derefter LEFT JOIN med den tabel:

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

Grundlæggende er det, du har brug for her, en dummy rowsource.

MySQL er det eneste større system, der mangler en måde at generere det på.

PostgreSQL implementerer en speciel funktion generate_series at gøre det, mens Oracle og SQL Server kan bruge rekursion (CONNECT BY og rekursiv CTE s, i overensstemmelse hermed).



  1. Mysql Vælg nogle tilfældige rækker og plus en specifik række

  2. MySql-fejl 150 - Fremmednøgler

  3. Node.js opretter forbindelse til MySQL Docker-beholder ECONNREFUSED

  4. 'Forbinde' en rails-app til en allerede eksisterende MySQL DB?