begin process at 2012 05 27 04:48:44
  Trouver un code source :
 
dans
 
Accueil > Forum > 

SQL

 > 

MySQL

 > 

Requêtes

 > 

Requetes pour rapports périodiques


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Requetes pour rapports périodiques

vendredi 11 septembre 2009 à 02:02:57 | Requetes pour rapports périodiques

marcmoonlight

Bonsoir,

Je cherche à construire des rapports périodiques (somme des ventes par mois par exemple) en une seule requête, sans sauter de période.

Un simple SELECT comme suit par exemple a pour lacune de sauter un mois s'il n'y a pas de vente :
SELECT DATE_FORMAT(date_facture, '%Y-%m') AS period, SUM(total) FROM factures GROUP BY DATE_FORMAT(date_facture, '%Y-%m) ORDER BY DATE_FORMAT(date_facture, '%Y-%m);

Alors je pense utiliser par exemple un LEFT JOIN qui me permettrai de lister d'une part les périodes, et d'autre part y joindre les résultats de la "vraie" requête. Il me reste donc à lister correctement les périodes. Mais comment construire le contenu d'une table dans une requete ?
Existe-t-il une notation du genre : SELECT period FROM LIST('2009-01', '2009-02', '2009-03') ?

Si oui, je pourrai écrire une requête dans le genre :
SELECT period FROM LIST('2009-01', '2009-02', '2009-03') AS p
LEFT JOIN SELECT DATE_FORMAT(date_facture, '%Y-%m') AS period, SUM(total) FROM factures AS f GROUP BY DATE_FORMAT(date_facture, '%Y-%m) ORDER BY DATE_FORMAT(date_facture, '%Y-%m) ON p.period=f.period

Ou bien une autre méthode est-elle plus courante ?

Merci beaucoup !

Marc

vendredi 11 septembre 2009 à 22:52:03 | Re : Requetes pour rapports périodiques

marcmoonlight

Bon ! J'ai trouvé ma réponse : une première série de UNION de SELECT des périodes qui m'intéressent, puis un LEFT JOIN pour chaque valeur à mesurer. Et mon script PHP pourra afficher les résultats de manière "passive" :

SELECT p.period, IFNULL( t.turnover, 0 ) AS turnover
FROM (

SELECT "2009-01" AS period
UNION SELECT "2009-03" AS period
UNION SELECT "2009-04" AS period
UNION SELECT "2009-05" AS period
UNION SELECT "2009-06" AS period
UNION SELECT "2009-07" AS period
UNION SELECT "2009-08" AS period
UNION SELECT "2009-09" AS period
) AS p
LEFT JOIN (

SELECT DATE_FORMAT( date_bill, "%Y-%m" ) AS period, SUM( total_amount_ht ) AS turnover
FROM customer_bills
WHERE _id_customer_account =3238
GROUP BY DATE_FORMAT( date_bill, "%Y-%m" )
) AS t ON p.period = t.period

Reste maintenant à créer une procédure stockée pour récupérer ma liste de périodes (elle prendrait en paramètres le zoom (= le pattern du DATE_FORMAT) et la plage de dates (from et until)). Quelqu'un aurait-il une suggestion ?

Merci !

Marc



Cette discussion est classée dans : date, format, select, facture, period


Répondre à ce message

Sujets en rapport avec ce message

Supprimer une date antérieure à une autre [ par billou_13 ] Bonjour, Alors, voila je dois faire une requête SQL permettant de supprimer toutes les informations d'une table où les dates seraient antérieures à 6 Date format... [ par elpens ] Bonjour,j'ai quelques procedures stockees qui utilisent des dates. Mon problème (si on peux appeler cela un problème), est que je ne sais pas quelle e Déclaration de variable avec format de date [ par Creat ] Bonjour,   J'aimerais savoir s'il est possible de déclarer une variable date avec un format bien précis.  Je m'explique, mon format de date est aaaa-M Select sans doublon avec date la plus recente [ par ironnyc ] Bonjour a tous!je cherche a faire une requete Select avec une base MySql sur la table suivante: #Table "historique"+-----+-------------+------------+| requete avec dernière date [ par ahcorad ] Bonjour,Je boss sur une appli Access et je souhaiterais obtenir le dernier résultat de chaque zone.Je bloque avec la fonction last pour l'imbriquer av problème de requette [ par beny100 ] bonjour,j'ai un problème avec ma requette. voiçi le code:select * from Alarme_active where date_debut >='31/01/2007'and date_debut='01/02/2007'elle ne Problème de date [ par gregorybts ] Bonjour,JE cherche à ajouter une contrainte sur cette requête, j'aimerai n'obtenir que les factures datant de plus d'un mois.Le problème c'est que déj probleme somme cumulée [ par salimdz2004 ] Bonjour Je veux faire une somme cumulée dans une requête Je veux faire la sommé du mon comparer deux date dans une requete select simple [ par isac83 ] voila, j'ai voulu selectionner des produit dans la table produit qui on: date_debut_solde et date_fin_solde respectivement avant est aprés undate pres un "select" un peu dur [ par fatatra ] Bonjour a tous;J'ais une base de données qui contient des evenements a un champ date yyyy-mm-aa et un champ heure hh:mm:ss.A un moment donnée je voudr


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 20,452 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales