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 :

Boucle sur plusieurs intervalles de temps


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingenieur d'étude
    Inscrit en
    Janvier 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Ingenieur d'étude
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2017
    Messages : 16
    Points : 5
    Points
    5
    Par défaut Boucle sur plusieurs intervalles de temps
    Bonjour,

    Je souhaite effectuer une boucle sur plusieurs années, de 2005 à 2015 par exemple avec pour chaque année la même période de temps. Mais je n'arrive pas initialiser ma variable, j'ai une erreur de syntaxe, du style
    Nom : Annotation 2021-07-16 144346.jpg
Affichages : 107
Taille : 5,5 Ko
    Je vous joins un extrait de mon script pour exemple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SET @an=2005
     
    SELECT  TO_CHAR(DAT, 'ddmmyyyy') AS LADATE, TX_ORR2,
     
    FROM    GRILLE_ETP_Q
     
    WHERE   DAT BETWEEN to_timestamp('20012005', 'ddmmyyyy') AND  to_timestamp('2002005', 'ddmmyyyy')
     
    GROUP BY LADATE, TX_ORR2
    ORDER BY LADATE ASC
    Merci d'avance pour votre aide,

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    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 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Je n'ai pas compris le but recherché, avec une exemple de jeu de données en entrée et de résultat en sortie, ce serait plus clair.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingenieur d'étude
    Inscrit en
    Janvier 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Ingenieur d'étude
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2017
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Désolé si je n'ai pas été clair, le problème est tout simple en fait. Je souhaite effectuer des calculs sur des intervalles de temps qui se répètent pendant 10 ans. Par exemple entre le 20 janv 2005 et le 20 fev 2005 puis entre le 20 janv 2006 et le 20 fev 2006, jusqu'à la période du 20 janv 2015 au 20 fev 2015.
    Pour cela je souhaite incrémenter l'année de 2005 à 2015, il faut donc que j'initialise auparavant ma variable an à 2005 pour faire ensuite une boucle de 2005 à 2015 dans lequel je fais mes calculs. Je ne sais pas si c'est possible avec SQL...??

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    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 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Si votre SGBD le permet, alimentez une table des différentes périodes par requête récursive puis faites une requête s'appuyant sur cette table

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Ingenieur d'étude
    Inscrit en
    Janvier 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Ingenieur d'étude
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2017
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    Ah oui, pas si simple que cela en fait, je vais essayer ça, merci beaucoup pour le conseil

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Vous pouvez faire du procédural, mais tout d'abord il faut préciser le SGBD car le procédural est différent d'un éditeur à l'autre, puis poster le message dans la section spécialisée du SGBD.
    Ensuite, il est préférable de poster un peu plus de code (déclaration...)

    Faites un mini script ou vous essayez de renseigner une variable et de l'afficher par exemple, et présentez l'ensemble du script avec le message d'erreur.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Ingenieur d'étude
    Inscrit en
    Janvier 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Ingenieur d'étude
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2017
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    Je souhaite dans un premier temps créer une table qui correspondent aux périodes du 20 janv au 20 fev pour les années 2005 à 2020. J'ai fait le code suivant mais j'ai un bug que je ne saisis pas ...

    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
    CREATE TABLE INTERVALLE
    (an        INTEGER NOT NULL PRIMARY KEY,
     interval  DATE
     )
     
    -- population de la table
    INSERT INTO INTERVALLE VALUES (2005, to_timestamp('20012005', 'ddmmyyyy'), to_timestamp('20022005', 'ddmmyyyy'))
     
    WITH INTERVALLE
    AS (
            SELECT 2005 AS i
     
            UNION ALL
     
            SELECT i + 1
            FROM an
            WHERE i < 2020
            )

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Ingenieur d'étude
    Inscrit en
    Janvier 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Ingenieur d'étude
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2017
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    Nos posts se sont croisés Skuatamad. Voilà de façon concrète un extrait simplifié de mon code actuel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT  TO_CHAR(DAT, 'ddmmyyyy') AS LADATE, POSX, POSY,TX_ORR2
    FROM    GRILLE_ETP_Q
    WHERE   DAT BETWEEN to_timestamp('20012005', 'ddmmyyyy') AND  to_timestamp('20022005', 'ddmmyyyy')
            OR DAT BETWEEN to_timestamp('20012006', 'ddmmyyyy') AND  to_timestamp('20022006', 'ddmmyyyy')
            OR DAT BETWEEN to_timestamp('20012007', 'ddmmyyyy') AND  to_timestamp('2002007', 'ddmmyyyy')
            OR DAT BETWEEN to_timestamp('20012008', 'ddmmyyyy') AND  to_timestamp('20022008', 'ddmmyyyy')
            OR DAT BETWEEN to_timestamp('20012009', 'ddmmyyyy') AND  to_timestamp('20022009', 'ddmmyyyy')
            OR DAT BETWEEN to_timestamp('20012010', 'ddmmyyyy') AND  to_timestamp('20022010', 'ddmmyyyy')
     
    GROUP BY LADATE, POSX, POSY, TX_ORR2
    ORDER BY LADATE ASC, POSX ASC, POSY ASC
    Et voilà ce que j'obtiens :
    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
    01022005;-4.750;48.375;11.0
    01022005;-4.750;48.500;10.8
    01022005;-4.625;48.000;10.6
    01022005;-4.625;48.250;11.2
    01022005;-4.625;48.375;11.0
    01022005;-4.625;48.500;10.8
    01022005;-4.500;48.000;11.0
    01022005;-4.500;48.250;11.0
    01022005;-4.500;48.375;10.9
    01022005;-4.500;48.500;10.8
    01022005;-4.375;47.875;11.3
    01022005;-4.375;48.000;11.1
    01022005;-4.375;48.250;11.0
    01022005;-4.375;48.375;10.7
    01022005;-4.375;48.500;10.7
    01022005;-4.375;48.625;11.1
    01022005;-4.250;47.875;12.1
    01022005;-4.250;48.000;11.0
    01022005;-4.250;48.125;11.0
    01022005;-4.250;48.250;10.9
    01022005;-4.250;48.375;10.5
    Mais je voudrais simplifier mon code car j'ai besoin de faire un calcul assez long sur la température maxi (TX_ORR2) et je dois le répéter de 2005 à 2020. Donc je voudrais remplacer mes répétitions d'intervalles par une boucle. Merci encore pour votre aide,

Discussions similaires

  1. [XL-2007] Boucle sur plusieur Userforms
    Par jacquesbaume dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/03/2011, 17h18
  2. Boucle sur plusieurs colonnes définies à l'avance
    Par fuyo2004 dans le forum Excel
    Réponses: 5
    Dernier message: 28/04/2010, 11h26
  3. Mesures sur un intervalle de temps
    Par iza76 dans le forum SSAS
    Réponses: 7
    Dernier message: 08/02/2010, 15h53
  4. Boucles sur plusieurs tables
    Par thiblight dans le forum SAS Base
    Réponses: 6
    Dernier message: 07/07/2009, 14h54
  5. [phpBB][2] Faire une boucle sur plusieurs colonnes
    Par Vinuto dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 28/09/2007, 10h45

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