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

Développement SQL Server Discussion :

Génération de mois séquentiels en SQL


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    test
    Inscrit en
    Mai 2016
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Algérie

    Informations professionnelles :
    Activité : test
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Mai 2016
    Messages : 347
    Par défaut Génération de mois séquentiels en SQL
    bonjour a tous ,

    J'ai un table SQL comme ci-dessous (échantillon):

    code | date | value
    1000 2016-08-05 5000
    1000 2016-12-27 8000
    1000 2018-03-19 6000
    1000 2018-06-02 6000

    Maintenant, j'ai besoin de générer des mois séquentiels comme ceci:

    code | date | value
    1000 2016-08-05 5000
    1000 2016-09-05 5000
    1000 2016-10-05 5000
    1000 2016-11-05 5000
    1000 2016-12-27 8000
    1000 2017-01-27 8000
    1000 2017-02-27 8000
    ........
    1000 2018-03-19 6000
    1000 2018-04-19 6000
    1000 ....

    La séquence continue jusqu'à ce qu'elle atteint la date maximale d'un code. Dans cet exemple, la date maximale est le 2018-06-02 pour le code 1000. Comment puis-je générer la séquence de mois? Toute aide serait très appréciée
    merci

  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
    Par défaut
    bonjour,

    vous pouvez faire comme ceci.

    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
     
    WITH Cal AS (
    	SELECT dte, dte AS DateRef, LEAD(dte) OVER(ORDER BY dte) AS DateMax
    	FROM LaTable
     
    	UNION ALL
     
    	SELECT DATEADD(MONTH, 1, Cal.dte),DateRef,  DateMax
    	FROM Cal
    	WHERE  YEAR(DATEADD(MONTH, 1, Cal.dte)) < YEAR(DateMax)
    		OR MONTH(DATEADD(MONTH, 1, Cal.dte)) < MONTH(DateMax)
    )
    SELECT T.code, Cal.dte, T.valeur
    FROM Cal
    INNER JOIN LaTable T
    	ON T.dte = Cal.DateRef
    ORDER BY dte;

  3. #3
    Membre émérite

    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Novembre 2014
    Messages
    817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Novembre 2014
    Messages : 817
    Billets dans le blog
    2
    Par défaut
    bonjour

    une autre méthode

    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
    declare   @mytable  TABLE (
       code   INTEGER  NOT NULL 
      ,date   DATE  NOT NULL
      ,value  INTEGER  NOT NULL
    );
    INSERT INTO @mytable(code,date,value) VALUES (1000,'2016-08-05',5000);
    INSERT INTO @mytable(code,date,value) VALUES (1000,'2016-12-27',8000);
    INSERT INTO @mytable(code,date,value) VALUES (1000,'2018-03-19',6000);
    INSERT INTO @mytable(code,date,value) VALUES (1000,'2018-06-02',6000);
     
    	with nums(i) as (
    		select 0
    		union all select i + 1 from nums where i < 24
    	)
    	select 
    		t.code,t.date,
    		dateadd(month, i, t.date) date,
    		t.value
    	from @mytable t
    	inner join nums n 
    		on not exists (
    			select 1
    			from @mytable t1
    			where t1.date > t.date and eomonth(t1.date) < eomonth(dateadd(month, i + 1, t.date))
    		)
    	order by t.date

Discussions similaires

  1. Réponses: 5
    Dernier message: 24/06/2008, 14h07
  2. Date(mois,année) en sql
    Par niceen dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/04/2007, 17h13
  3. MCD ->MPD et génération d'une base dans SQL Server
    Par Jix11 dans le forum PowerAMC
    Réponses: 1
    Dernier message: 23/04/2007, 16h22

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