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.
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()
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
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!