Heim >Datenbank >MySQL-Tutorial >Wie rufe ich die Transaktionen der letzten 7 Tage mit leeren Zeilen in einer einzelnen MySQL-Tabelle ab?

Wie rufe ich die Transaktionen der letzten 7 Tage mit leeren Zeilen in einer einzelnen MySQL-Tabelle ab?

Barbara Streisand
Barbara StreisandOriginal
2024-12-31 06:45:10851Durchsuche

How to Retrieve Last 7 Days' Transactions with Empty Rows in a Single MySQL Table?

Abrufen der Transaktionen der letzten 7 Tage und Einfügen leerer Zeilen in eine MySQL-Einzeltabelle

Um die Herausforderung des Extrahierens der Transaktionen der letzten 7 Tage zu bewältigen und das Erfassen leerer Zeilen aus einer MySQL-Datenbank, wir werden Folgendes durchlaufen Ansatz:

  1. Generieren Sie einen Datumsbereich:
    Wir beginnen mit der Erstellung einer Liste von Daten, die sich über die letzten sieben Tage erstrecken, indem wir die folgende Abfrage verwenden:

    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()
  2. Mit Transaktion beitreten Tabelle:
    Als nächstes verknüpfen wir diese generierte Datumsliste mit der Transaktionstabelle, um gegebenenfalls die entsprechenden Verkaufsbeträge zu erhalten:

    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

Vollständige Abfrage:

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

Mithilfe dieser umfassenden Abfrage können wir die Gesamtverkäufe für jede einzelne ermitteln der letzten sieben Tage, effektiv einschließlich leerer Zeilen für Tage ohne Transaktionen.

Das obige ist der detaillierte Inhalt vonWie rufe ich die Transaktionen der letzten 7 Tage mit leeren Zeilen in einer einzelnen MySQL-Tabelle 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