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
Susan SarandonOriginal
2024-12-23 06:21:22638Durchsuche

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)
);

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;

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

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!

Stellungnahme:
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