Heim > Datenbank > MySQL-Tutorial > Wie füllt man Datumslücken in MySQL-Aggregatabfragen mit Nullen?

Wie füllt man Datumslücken in MySQL-Aggregatabfragen mit Nullen?

Susan Sarandon
Freigeben: 2024-12-23 06:21:22
Original
677 Leute haben es durchsucht

How to Fill Date Gaps in MySQL Aggregate Queries with Zeroes?

Datumslücken in MySQL füllen

Problem:

Aggregierte Daten für bestimmte Daten extrahieren , wird eine MySQL-Abfrage verwendet. Der zurückgegebene Ergebnissatz enthält jedoch nur Datumsangaben, die Daten enthalten, sodass Lücken zwischen Datumsangaben ohne Daten entstehen. Ziel ist es, diese Lücken mit Nullen zu füllen, um einen kontinuierlichen Datumsbereich zu erstellen.

Lösung:

Um dies zu erreichen, ist eine Hilfstabelle erforderlich. Diese Tabelle enthält alle Daten vom gewünschten Startdatum bis zum gewünschten Enddatum.

CREATE TABLE dates (
  dt DATE NOT NULL,
  PRIMARY KEY (dt)
);
Nach dem Login kopieren

Die Hilfstabelle kann mit einer Abfrage gefüllt werden:

INSERT INTO dates (dt)
SELECT DATE(posted_at)
FROM messages
WHERE brand_id = 1
AND spam = 0
AND duplicate = 0
AND ignore = 0
GROUP BY DATE(posted_at)
UNION
SELECT DATE('2023-01-01') + INTERVAL i-1 DAY
FROM (
  SELECT 1 AS i 
  UNION ALL
  SELECT i + 1 FROM <table> WHERE i < DATEDIFF('2023-12-31', '2023-01-01')
) AS i;
Nach dem Login kopieren

Ersetzen Sie „2023-01 -01‘ und ‚2023-12-31‘ mit Ihrem gewünschten Start- und Enddatum.

Als nächstes wird die Hilfstabelle verwendet So führen Sie einen LEFT JOIN mit der Originalabfrage aus:

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
Nach dem Login kopieren

Diese modifizierte Abfrage gibt den gewünschten Ergebnissatz mit allen Datumsangaben zurück, einschließlich derjenigen ohne Daten in der Originaltabelle, gefüllt mit Nullen.

Das obige ist der detaillierte Inhalt vonWie füllt man Datumslücken in MySQL-Aggregatabfragen mit Nullen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage