Umfassende Daten aus einer MySQL-Einzeltabelle abrufen: Leere Zeilen und aktuelle Transaktionen abdecken
In dieser Diskussion wollen wir eine gemeinsame Herausforderung angehen Probleme beim Abfragen einer Datenbank: So integrieren Sie sowohl aktuelle Transaktionen als auch leere Tage in die Ergebnisse. Konkret konzentrieren wir uns darauf, die letzten sieben Tage der Verkaufstransaktionen abzurufen und dabei leere Zeilen für Tage ohne Aktivität einzubeziehen.
Zunächst nutzen wir die Funktionen der Funktion COALESCE(), die uns das Ersetzen ermöglicht ein Standardwert, wenn der Ausdruck NULL ergibt. In diesem Fall verwenden wir 0 als Standardwert für leere Zeilen.
Anschließend erstellen wir eine Unterabfrage, um eine umfassende Liste der Daten der letzten sieben Tage zu generieren. Dies dient als Grundlage für den vollständigen Ergebnissatz und stellt sicher, dass leere Zeilen enthalten sind.
Abschließend führen wir eine LEFT JOIN-Operation zwischen der generierten Datumsliste und der Transaktionstabelle durch und gleichen Datensätze basierend auf dem PURCHASE_DATE ab Spalte. Dadurch werden die Transaktionen mit den leeren Datumsdatensätzen zusammengeführt, sodass wir den Gesamtverkaufsbetrag für jeden Tag berechnen und sowohl aktuelle Transaktionen als auch leere Zeilen anzeigen können.
Die resultierende Abfrage bietet effektiv einen umfassenden Überblick über die letzten sieben Tage der Verkaufstransaktionen unter Berücksichtigung von Tagen ohne aufgezeichnete Aktivität.
Hier ist die vollständige Abfrage als Referenz:
SELECT t1.purchase_date, COALESCE(SUM(t1.amount + t2.amount), 0) AS amount FROM ( SELECT DATE_FORMAT(a.Date,'%Y-%m-%d') AS purchase_date, '0' AS amount FROM ( SELECT CURDATE() - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY AS Date FROM (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS a CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS b CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS c ) a WHERE a.Date BETWEEN NOW() - INTERVAL 7 DAY AND NOW() ) t1 LEFT JOIN ( SELECT DATE_FORMAT(purchase_date, '%Y-%m-%d') AS purchase_date, COALESCE(SUM(amount), 0) AS amount FROM transactions WHERE purchase_date BETWEEN NOW() - INTERVAL 7 DAY AND NOW() GROUP BY purchase_date ) t2 ON t2.purchase_date = t1.purchase_date GROUP BY t1.purchase_date ORDER BY t1.purchase_date DESC;
Das obige ist der detaillierte Inhalt vonWie rufe ich vollständige Verkaufsdaten für die letzten sieben Tage aus einer MySQL-Tabelle ab, einschließlich der Tage ohne Transaktionen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!