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
Libérer: 2024-12-31 14:38:10
original
879 Les gens l'ont consulté

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()
Copier après la connexion
  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
Copier après la connexion
  1. Résultats des groupes et des commandes :
GROUP BY t1.purchase_date
ORDER BY t1.purchase_date DESC
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal