IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Requête SQL basée sur les dates


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 72
    Points : 35
    Points
    35
    Par défaut Requête SQL basée sur les dates
    Bonjour à vous tous,

    J'ai une table contenant des factures, et j'aimerais extraire pour chaque client à partir de la date d'aujourd'hui les douzes derniers mois, et pour chaque mois du résultat je veux avoir la somme des montants de factures pour les douzes derniers mois à partir du mois courant.

    J'espère que j'étais claire.

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Quel est votre SGBD ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 72
    Points : 35
    Points
    35
    Par défaut
    Mon sgbd est SQL SERVER 2000

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    quelque chose comme ceci (pas testé)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    SELECT
    	DATEADD(
    		MONTH
    		,DATEDIFF(
    			MONTH
    			,0
    			,LaDate
    		) 
    		,0
    	),
    	SUM(Montant)
    FROM Facture
    WHERE LaDate >=
    	DATEADD(
    		MONTH
    		,DATEDIFF(
    			MONTH
    			,0
    			,GETDATE()
    		) - 11
    		,0
    	)
    GROUP BY 
    	DATEADD(
    		MONTH
    		,DATEDIFF(
    			MONTH
    			,0
    			,LaDate
    		) 
    		,0
    	)

  5. #5
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 72
    Points : 35
    Points
    35
    Par défaut
    Bonjour,

    Désolé de vous annoncer que ce n'est pas la bonne requête. cette requête que vous m'avez donner retourne juste la somme des montants de facture des derniers douze mois à partir de la date du jour.

    En fait ce n'est pas le besoin. Mon besoin c'est de récupérer pour chaque mois des douze derniers mois la somme des montants de ses derniers douze mois.

    par exemple :

    pour le mois janvier 2013 il faut que la requête me retourne la somme de montants à partir de janvier 2012 jusqu'à janvier 2013.
    pour le mois février 2013 il faut que la requête me retourne la somme de montants à partir de février 2012 jusqu'à février 2013.
    pour le mois mars 2013 il faut que la requête me retourne la somme de montants à partir de mars 2012 jusqu'à mars 2013.
    .
    .
    .
    .
    .
    jusqu'à:
    le mois mars 2014 il faut que la requête me retourne la somme de montants à partir de mars 2013 jusqu'à mars 2014.

    J'espère que j'étais claire cette fois ci.

    et merci d'avance.

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    hmmm


    Alors quelque chose dans ce gout là (il faudra peut être revoir les bornes...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    SELECT DATEADD(MONTH, n + 11, Mois)AS Mois,
    		COALESCE(SUM(Montant), 0) AS Total
    FROM
    (
    	SELECT 
    		DATEADD(
    			MONTH
    			,DATEDIFF(
    				MONTH
    				,0
    				,GETDATE()
    			) - 11
    			,0
    		) AS Mois
    ) AS  M(Mois)
    CROSS JOIN (
    	SELECT -12 AS n
    	UNION ALL SELECT -11
    	UNION ALL SELECT -10
    	UNION ALL SELECT -9
    	UNION ALL SELECT -8
    	UNION ALL SELECT -7
    	UNION ALL SELECT -6
    	UNION ALL SELECT -5
    	UNION ALL SELECT -4
    	UNION ALL SELECT -3
    	UNION ALL SELECT -2
    	UNION ALL SELECT -1
    ) Nb(n)
    LEFT JOIN LaTable
    	ON	LaDate >=  DATEADD(MONTH, n , Mois)
    	AND LaDate < DATEADD(MONTH, n + 11, Mois)
    GROUP BY DATEADD(MONTH, n + 11, Mois)

  7. #7
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 72
    Points : 35
    Points
    35
    Par défaut
    Re-Bonjour,

    Merci beaucoup pour votre aide. la requête marche très bien. C'est ce que je voulais parfaitement. merci encore.

    Mais une autre question. dans la requête il existe cette expression M(Mois) et cette expression Nb(n) qu'est ce que cela veut dire?

  8. #8
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    il s'agit d'alias pour les pseudo tables et leur colonne.

  9. #9
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 72
    Points : 35
    Points
    35
    Par défaut
    Merci beaucoup chef ca marche très bien

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requêtes avec critères sur les dates
    Par marcelstan dans le forum Access
    Réponses: 11
    Dernier message: 14/05/2014, 16h20
  2. Réponses: 1
    Dernier message: 28/03/2014, 23h42
  3. Problème Sql developer sur les Dates
    Par fardon57 dans le forum Sql Developer
    Réponses: 3
    Dernier message: 15/01/2009, 14h08
  4. Requête avec travail sur les dates
    Par masseur dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 16/07/2008, 12h11
  5. [MySQL] Requête de filtre sur les dates
    Par Mathieu72 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 04/01/2007, 11h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo