Maison >base de données >tutoriel mysql >Comment récupérer les données de transaction des 7 derniers jours, y compris les jours sans transaction dans MySQL ?

Comment récupérer les données de transaction des 7 derniers jours, y compris les jours sans transaction dans MySQL ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-31 14:38:10894parcourir

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

Sélection des lignes des 7 derniers jours, y compris les lignes vides dans une seule table

Dans une base de données MySQL, vous souhaitez récupérer les transactions de les 7 derniers jours et calculez le montant total des ventes pour chaque jour. Cependant, vous voulez vous assurer que même si aucune donnée n'est disponible pour un jour particulier, une ligne vide est incluse dans l'ensemble de résultats.

Vous avez tenté de résoudre ce problème, mais votre requête récupère uniquement les jours avec transactions. Pour obtenir le résultat souhaité, vous devez modifier votre approche.

Solution :

La solution consiste à utiliser une sous-requête pour générer une liste de dates au cours des 7 derniers jours. . Cette liste est ensuite jointe au tableau des transactions pour créer un ensemble de résultats complet.

  1. Générer une liste de dates :
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. Rejoindre les transactions Tableau :
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. Résultats des groupes et des commandes :
GROUP BY t1.purchase_date
ORDER BY t1.purchase_date DESC

Cette requête combine les jours générés avec la table des transactions, garantissant que même pour les jours sans transactions, les lignes vides sont incluses. L'ensemble de résultats final affichera les dates d'achat et le montant total des ventes des 7 derniers jours, avec des lignes vides indiquant aucune transaction pour ces jours.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn