Maison > base de données > tutoriel mysql > Comment inclure des lignes vides dans une requête MySQL affichant les transactions quotidiennes des 7 derniers jours ?

Comment inclure des lignes vides dans une requête MySQL affichant les transactions quotidiennes des 7 derniers jours ?

Linda Hamilton
Libérer: 2024-12-29 18:13:09
original
541 Les gens l'ont consulté

How to Include Empty Rows in a MySQL Query Showing Daily Transactions for the Last 7 Days?

Intégration de lignes vides dans une requête de table unique MySQL pour les 7 derniers jours

Dans cette requête, nous visons à récupérer toutes les transactions des sept derniers jours, en garantissant que même les jours sans ventes enregistrées sont inclus dans les résultats. Nous utilisons une technique qui combine deux requêtes distinctes pour obtenir ce résultat.

Tout d'abord, nous énumérons toutes les dates des sept derniers jours à l'aide d'une instruction SELECT imbriquée. Cette requête génère effectivement une liste de dates qui sert de base à nos données de transactions.

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

Ensuite, nous combinons cette liste complète de dates avec une requête qui regroupe les données de ventes quotidiennes de notre table de transactions. Cette jointure garantit que nous incluons à la fois les transactions enregistrées et les lignes vides pour les dates sans activité.

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
Copier après la connexion

En intégrant de manière transparente ces deux requêtes, nous construisons efficacement un tableau unique qui répertorie chronologiquement toutes les dates dans la plage spécifiée, avec les données de vente correspondantes ou des zéros lorsqu'aucune transaction n'a eu lieu.

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