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

MS SQL Server Discussion :

Récupérer les 3 derniers mois à partir de la date encours [2014]


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 193
    Points : 89
    Points
    89
    Par défaut Récupérer les 3 derniers mois à partir de la date encours
    Salut,
    Je voudrais récupérer les n derniers jours, semaines et Mois à partir d'une requete sql server.
    J'ai réussi à faire pour le jour avec succès.
    Pour la semaine, j'obtiens le N° de la semaine alors que moi, je voudrais obtenir le 1er et le dernier jour de la semaine,
    Pour le mois ne marche pas, j'obtiens le même mois n fois, c'est à dire le mois de la date sélectionnée. Voici les requêtes :

    I /- SEMAINE
    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
    35
    36
    37
    38
    39
    40
     
    USE [P2015]
    GO
    /****** Object:  StoredProcedure [VENTE].[COMPARAISON_STATISTIQUE_BY_SEMAINE]    Script Date: 03/12/2015 09:40:26 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
     
      ALTER PROCEDURE [VENTE].[COMPARAISON_STATISTIQUE_BY_SEMAINE]
      @Nbrejour int,
      @DateStart Datetime,
      @Id_Societe int,
        @CriVersionLogiciel varchar(75),
      @CriPoste varchar(75)
     
     
      AS
      SET NOCOUNT ON
     
      SET NOCOUNT ON
       SELECT 
       DATENAME(ISOWK,convert(date,[LC].[DATEPIECE],101))Semaine
       ,sum([SLC].[NETAPAYER])Montant
       ,SOC.RAISOC
         , (Select @CriVersionLogiciel) as CriVersionLogiciel
          , (Select @CriPoste) as CriPoste
    	        , (Select @Nbrejour) as Nbrejour
     
     
      FROM [VENTE].[LIVRAISON_CLIENT] LC
      INNER JOIN [VENTE].[SUITE_LIVRAISON_CLITS] SLC
      ON [SLC].[ID_BLIVRAISON_CLITS] = [LC].[ID_AUTO]
      INNER JOIN [MODELE].[SOCIETE] SOC
      ON [LC].[ID_SOCIETE] = [SOC].[ID_AUTO]
      WHERE 
      convert(date,[LC].[DATEPIECE],101) between convert(date,@DateStart-(@Nbrejour-1),101) and  convert(date,@DateStart,101)  and [LC].[IS_CANCEL] = 'false' and [LC].[IS_VALIDER] = 'true'
      and [LC].[ID_SOCIETE] = @Id_Societe
     
      GROUP BY convert(date,[LC].[DATEPIECE],101)    ,SOC.RAISOC
    II - MOIS

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    USE [P2015]
    GO
    /****** Object:  StoredProcedure [VENTE].[COMPARAISON_STATISTIQUE_BY_MOIS]    Script Date: 03/12/2015 08:43:12 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
     
      ALTER PROCEDURE [VENTE].[COMPARAISON_STATISTIQUE_BY_MOIS]
      @Nbrejour int,
      @DateStart Datetime,
      @Id_Societe int,
        @CriVersionLogiciel varchar(75),
      @CriPoste varchar(75)
     
     
      AS
      SET NOCOUNT ON
     
      SET NOCOUNT ON
       --SELECT 
       --DATENAME(MM,convert(date,[LC].[DATEPIECE],101))MOIS
     
       SELECT 
     
        DATENAME(Month, convert(date,[LC].[DATEPIECE],101))MOIS
     
       ,sum([SLC].[NETAPAYER])Montant
       ,SOC.RAISOC
         , (Select @CriVersionLogiciel) as CriVersionLogiciel
          , (Select @CriPoste) as CriPoste
    	        , (Select @Nbrejour) as Nbrejour
     
     
      FROM [VENTE].[LIVRAISON_CLIENT] LC
      INNER JOIN [VENTE].[SUITE_LIVRAISON_CLITS] SLC
      ON [SLC].[ID_BLIVRAISON_CLITS] = [LC].[ID_AUTO]
      INNER JOIN [MODELE].[SOCIETE] SOC
      ON [LC].[ID_SOCIETE] = [SOC].[ID_AUTO]
      WHERE 
      convert(date,[LC].[DATEPIECE],101) between convert(date,@DateStart-(@Nbrejour),101) and  convert(date,@DateStart,101)  and [LC].[IS_CANCEL] = 'false' and [LC].[IS_VALIDER] = 'true'
      and [LC].[ID_SOCIETE] = @Id_Societe
     
      GROUP BY convert(date,[LC].[DATEPIECE],101)   ,SOC.RAISOC
     
      --[LC].[ID_DEPOT] = @Id_Depot and [LC].[DATECREATION] between  @DateVente and DATEADD(d,1,@DateVente) and [LC].[ID_VENDEUR] = @Id_Vendeur
    Merci de m'aider

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 130
    Points : 38 543
    Points
    38 543
    Billets dans le blog
    9
    Par défaut
    Pour récupérer le début et la fin de semaine à partir d'une date, vous pouvez faire comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT                                                  
        MADATE
       ,DAYOFWEEK(MADATE) AS JOURSEM                        
       ,DATE(MADATE)-(DAYOFWEEK(MADATE)-2) DAYS AS DEBSEM   
       ,DATE(MADATE)+(8-DAYOFWEEK(MADATE)) DAYS AS FINSEM   
    FROM MATABLE
    Exemple de résultats :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    MADATE         JOURSEM DEBSEM     FINSEM    
    2015-09-24           5 2015-09-21 2015-09-27
    2015-01-01           5 2014-12-29 2015-01-04
    2010-02-17           4 2010-02-15 2010-02-21
    2010-02-18           5 2010-02-15 2010-02-21
    2015-09-10           5 2015-09-07 2015-09-13
    2014-08-15           6 2014-08-11 2014-08-17
    2014-08-17           1 2014-08-18 2014-08-24
    2014-08-16           7 2014-08-11 2014-08-17
    2015-09-10           5 2015-09-07 2015-09-13
    2014-08-16           7 2014-08-11 2014-08-17
    2015-02-16           2 2015-02-16 2015-02-22

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 193
    Points : 89
    Points
    89
    Par défaut
    Merci beaucoup pour votre intervention mais ça ne marche pas.
    On dirait que les fonctions ne marchent pas sous sql server 2014

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 130
    Points : 38 543
    Points
    38 543
    Billets dans le blog
    9
    Par défaut
    Oups j'avais cru oracle désolé
    du coup remplacez dayofweek par datepart(dw,votredate)

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 193
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Pour récupérer le début et la fin de semaine à partir d'une date, vous pouvez faire comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT                                                  
        MADATE
       ,DAYOFWEEK(MADATE) AS JOURSEM                        
       ,DATE(MADATE)-(DAYOFWEEK(MADATE)-2) DAYS AS DEBSEM   
       ,DATE(MADATE)+(8-DAYOFWEEK(MADATE)) DAYS AS FINSEM   
    FROM MATABLE
    Exemple de résultats :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    MADATE         JOURSEM DEBSEM     FINSEM    
    2015-09-24           5 2015-09-21 2015-09-27
    2015-01-01           5 2014-12-29 2015-01-04
    2010-02-17           4 2010-02-15 2010-02-21
    2010-02-18           5 2010-02-15 2010-02-21
    2015-09-10           5 2015-09-07 2015-09-13
    2014-08-15           6 2014-08-11 2014-08-17
    2014-08-17           1 2014-08-18 2014-08-24
    2014-08-16           7 2014-08-11 2014-08-17
    2015-09-10           5 2015-09-07 2015-09-13
    2014-08-16           7 2014-08-11 2014-08-17
    2015-02-16           2 2015-02-16 2015-02-22
    ça n'a pas marché. Je n'ai pas pu obtenir le premier et le dernier jour de la semaine.
    Merci pour votre aide

  6. #6

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 130
    Points : 38 543
    Points
    38 543
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par eddyphan Voir le message
    ça n'a pas marché. Je n'ai pas pu obtenir le premier et le dernier jour de la semaine.
    Merci pour votre aide
    Vous avez loupé mon correctif : datepart(dw,votredate)

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 193
    Points : 89
    Points
    89
    Par défaut
    Merci beaucoup pour cette réponse magique.
    J'ai quand même un autre souci de doublon. Quand je veux sélectionner les 4 semaines précédente, j'ai par exemple 3 fois la semaine 5 et une fois la semaine 6.
    Je peux dire que ça doit être au niveau de mon regroupement (group by) :
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    USE [P2015]
    GO
    /****** Object:  StoredProcedure [VENTE].[COMPARAISON_STATISTIQUE_BY_SEMAINE]    Script Date: 04/12/2015 10:13:23 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
     
      ALTER PROCEDURE [VENTE].[COMPARAISON_STATISTIQUE_BY_SEMAINE]
      @Nbrejour int,
      @DateStart Datetime,
      @Id_Societe int,
      @CriVersionLogiciel varchar(75),
      @CriPoste varchar(75)
     
     
      AS
      SET NOCOUNT ON
     
      SET NOCOUNT ON
       SELECT 
         DATENAME(ISO_WEEK,convert(date,[LC].[DATEPIECE],101))Semaine
       , DATEADD(week, DATEDIFF(week, 0,convert(date,[LC].[DATEPIECE],101)), 0) AS premier_jour_de_la_semaine
       , DATEADD(DAY, -1, DATEADD(week, DATEDIFF(week, 0, convert(date,[LC].[DATEPIECE],101)) + 1, 0)) AS dernier_jour_de_la_semaine_courante 
       , sum([SLC].[NETAPAYER])Montant
       , SOC.RAISOC
       , (Select @CriVersionLogiciel) as CriVersionLogiciel
       , (Select @CriPoste) as CriPoste
       , (Select @Nbrejour) as Nbrejour
     
     
      FROM [VENTE].[LIVRAISON_CLIENT] LC
      INNER JOIN [VENTE].[SUITE_LIVRAISON_CLITS] SLC
      ON [SLC].[ID_BLIVRAISON_CLITS] = [LC].[ID_AUTO]
      INNER JOIN [MODELE].[SOCIETE] SOC
      ON [LC].[ID_SOCIETE] = [SOC].[ID_AUTO]
     
      WHERE 
      convert(date,[LC].[DATEPIECE],101) between convert(date,@DateStart-(@Nbrejour),101) and  convert(date,@DateStart,101)  and [LC].[IS_CANCEL] = 'false' and [LC].[IS_VALIDER] = 'true'
      and [LC].[ID_SOCIETE] = @Id_Societe
     
      GROUP BY 
     convert(date,[LC].[DATEPIECE],101)
     
      ,SOC.RAISOC
    Aussi pour le mois, ça marche mais j'obtiens à partir du mois précédent. SI je suis en décembre et je veux obtenir la performance des 3 mois derniers,
    je dois avoir :
    Décembre,
    Novembre
    Octobre
    Mais avec la requête je n'ai pas le mois encours soit :
    Novembre
    Octobre
    Septembre

    Voici la requête du regroupement par mois :

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    USE [P2015]
    GO
    /****** Object:  StoredProcedure [VENTE].[COMPARAISON_STATISTIQUE_BY_MOIS]    Script Date: 04/12/2015 10:16:58 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
     
      ALTER PROCEDURE [VENTE].[COMPARAISON_STATISTIQUE_BY_MOIS]
      @Nbrejour int,
      @DateStart Datetime,
      @Id_Societe int,
        @CriVersionLogiciel varchar(75),
      @CriPoste varchar(75)
     
     
      AS
      SET NOCOUNT ON
      SET LANGUAGE french
     
       SELECT 
     
        DATENAME(Month, convert(date,[LC].[DATEPIECE],101))MOIS
     
       ,sum([SLC].[NETAPAYER])Montant
       ,SOC.RAISOC
         , (Select @CriVersionLogiciel) as CriVersionLogiciel
          , (Select @CriPoste) as CriPoste
    	        , (Select @Nbrejour) as Nbrejour
    			 , (Select   @DateStart) as DateStart
     
     
      FROM [VENTE].[LIVRAISON_CLIENT] LC
      INNER JOIN [VENTE].[SUITE_LIVRAISON_CLITS] SLC
      ON [SLC].[ID_BLIVRAISON_CLITS] = [LC].[ID_AUTO]
      INNER JOIN [MODELE].[SOCIETE] SOC
      ON [LC].[ID_SOCIETE] = [SOC].[ID_AUTO]
      WHERE 
     
       [LC].[DATEPIECE]  BETWEEN DATEADD(month, -@Nbrejour, DATEADD(day, -DATEPART(day, @DateStart) + 1, @DateStart))
       AND DATEADD(day, -DATEPART(day, @DateStart), @DateStart)
       and [LC].[IS_CANCEL] = 'false' and [LC].[IS_VALIDER] = 'true' and [LC].[ID_SOCIETE] = @Id_Societe
     
      GROUP BY SOC.RAISOC
      ,  DATENAME(Month, convert(date,[LC].[DATEPIECE],101))

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

Discussions similaires

  1. [PHP 5.2] Récupérer les x derniers mois
    Par LhIaScZkTer dans le forum Langage
    Réponses: 4
    Dernier message: 16/08/2013, 21h18
  2. Réponses: 11
    Dernier message: 19/03/2009, 10h06
  3. Réponses: 7
    Dernier message: 21/05/2008, 15h47
  4. Récupérer le nom du mois à partir d'une date.
    Par zooffy dans le forum ASP.NET
    Réponses: 10
    Dernier message: 04/03/2008, 14h48
  5. [Dates] Récupérer les 6 derniers mois
    Par identifiant_bidon dans le forum Langage
    Réponses: 4
    Dernier message: 06/12/2007, 09h21

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