Auswählen von Zeilen der letzten 7 Tage, einschließlich leerer Zeilen in einer einzelnen Tabelle
In einer MySQL-Datenbank möchten Sie Transaktionen abrufen der letzten 7 Tage und berechnen Sie den Gesamtumsatz für jeden Tag. Sie möchten jedoch sicherstellen, dass auch dann eine leere Zeile im Ergebnissatz enthalten ist, wenn für einen bestimmten Tag keine Daten verfügbar sind.
Sie haben versucht, dieses Problem zu beheben, aber Ihre Abfrage ruft nur die Tage mit ab Transaktionen. Um das gewünschte Ergebnis zu erzielen, müssen Sie Ihren Ansatz ändern.
Lösung:
Die Lösung besteht darin, mithilfe einer Unterabfrage eine Liste der Daten innerhalb der letzten 7 Tage zu erstellen . Diese Liste wird dann mit der Transaktionstabelle verknüpft, um einen umfassenden Ergebnissatz zu erstellen.
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()
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() AND vendor_id = 0 GROUP BY purchase_date )t2 ON t2.purchase_date = t1.purchase_date
GROUP BY t1.purchase_date ORDER BY t1.purchase_date DESC
Diese Abfrage kombiniert die generierten Tage mit Die Transaktionstabelle stellt sicher, dass auch an Tagen ohne Transaktionen leere Zeilen enthalten sind. Der endgültige Ergebnissatz zeigt die Kaufdaten und Gesamtverkaufsbeträge der letzten 7 Tage an, wobei leere Zeilen angeben, dass an diesen Tagen keine Transaktionen stattgefunden haben.
Das obige ist der detaillierte Inhalt vonWie rufe ich Transaktionsdaten der letzten 7 Tage ab, einschließlich der Tage ohne Transaktionen in MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!