Heim >Datenbank >MySQL-Tutorial >Wie rufe ich die Transaktionsdaten der letzten 7 Tage ohne Verkaufszeilen in MySQL ab?

Wie rufe ich die Transaktionsdaten der letzten 7 Tage ohne Verkaufszeilen in MySQL ab?

Barbara Streisand
Barbara StreisandOriginal
2024-12-28 15:49:48497Durchsuche

How to Retrieve Last 7 Days' Transaction Data with Zero Sales Rows in MySQL?

MySql-Einzeltabelle: Auswahl der letzten 7 Tage mit leeren Zeilen

Problem:

Die Ziel ist es, Transaktionsdaten der letzten 7 Tage abzurufen und den Gesamtumsatz für jeden Tag anzuzeigen, einschließlich leerer Zeilen für Tage ohne Transaktionen. Die folgende Abfrage gibt nur Tage mit Umsätzen ungleich Null zurück:

SELECT PURCHASE_DATE, SUM(AMOUNT) AS AMOUNT
FROM transactions
WHERE PURCHASE_DATE BETWEEN NOW() - INTERVAL 7 DAY AND NOW()
GROUP BY PURCHASE_DATE;

Lösung:

Um das gewünschte Ergebnis zu erzielen, wird eine Kombination von Abfragen verwendet:

  1. Erstellen Sie eine Liste von Termine:

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

Diese Abfrage generiert eine Liste der Termine der letzten 7 Tage.

  1. Beitreten mit Transaktionsdaten:

    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()
      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 hat Verknüpfungen hinterlassen Die generierte Datumsliste mit den tatsächlichen Transaktionsdaten, wobei leere Zeilen für Tage ohne Transaktionen hinzugefügt werden. Die Koaleszenz wird zur Verarbeitung von Nullwerten verwendet.

Das obige ist der detaillierte Inhalt vonWie rufe ich die Transaktionsdaten der letzten 7 Tage ohne Verkaufszeilen in MySQL ab?. 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