Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mendapatkan Data Transaksi untuk 7 Hari Terakhir, Termasuk Hari Tanpa Transaksi dalam MySQL?

Bagaimana untuk Mendapatkan Data Transaksi untuk 7 Hari Terakhir, Termasuk Hari Tanpa Transaksi dalam MySQL?

Susan Sarandon
Susan Sarandonasal
2024-12-31 14:38:10874semak imbas

How to Retrieve Transaction Data for the Last 7 Days, Including Days with No Transactions in MySQL?

Memilih Baris daripada 7 Hari Terakhir, Termasuk Baris Kosong dalam Jadual Tunggal

Dalam pangkalan data MySQL, anda ingin mendapatkan semula transaksi daripada 7 hari yang lalu dan hitung jumlah jualan untuk setiap hari. Walau bagaimanapun, anda ingin memastikan bahawa walaupun tiada data tersedia untuk hari tertentu, baris kosong disertakan dalam set hasil.

Anda telah cuba menangani isu ini, tetapi pertanyaan anda hanya mendapatkan semula hari dengan urus niaga. Untuk mencapai hasil yang diingini, anda perlu mengubah suai pendekatan anda.

Penyelesaian:

Penyelesaian melibatkan penggunaan subquery untuk menjana senarai tarikh dalam tempoh 7 hari yang lalu . Senarai ini kemudian dibiarkan bercantum dengan jadual urus niaga untuk mencipta set hasil yang komprehensif.

  1. Jana Senarai Tarikh:
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()
  1. Sertai dengan Transaksi Jadual:
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
  1. Keputusan Kumpulan dan Pesanan:
GROUP BY t1.purchase_date
ORDER BY t1.purchase_date DESC

Pertanyaan ini menggabungkan hari yang dijana dengan jadual urus niaga, memastikan bahawa walaupun untuk hari tanpa transaksi, baris kosong disertakan. Set keputusan akhir akan memaparkan tarikh pembelian dan jumlah jualan selama 7 hari yang lalu, dengan baris kosong yang menunjukkan tiada transaksi untuk hari tersebut.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Data Transaksi untuk 7 Hari Terakhir, Termasuk Hari Tanpa Transaksi dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn