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 :

Valeur en début et fin de période


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Valeur en début et fin de période
    Bonjour à tous,

    Je viens sur le site, car malgré ma recherche dans mes connaissances SQL, je ne trouve pas la solution, voici mon problème, si quelqu'un peut me donner la solution ...

    Je gère une table unique : TensionsMilli (plus de 40 millions de records), cette table contient les rubriques suivantes :

    Chrono : Entier non signé sur 4 octets (Clé unique)
    Data_Date : Date sur 8 (AAAAMMJJ)
    Data_Heure : Heure sur 9 (HHMMSSLLL) LLL = millièmes de seconde
    Tens_Demande : Réel sur 8 (2 décimales)
    Tens_Disponible : Réel sur 8 (2 décimales)
    DateHeureLLL : Chaîne sur 17 (clé unique composée de Data_Date + Data_Heure)

    Je souhaite regrouper cette table par minute, j'ai donc écrit la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT RPAD(SUBSTR(DateHeureLLL, 1, 12),14,'0') AS DateHeure,
                      MAX(DISTINCT Tens_Demande) AS HautDemande,
                      MIN(DISTINCT Tens_Demande) AS BasDemande,
                      MAX(DISTINCT Tens_Disponible) AS HautDisponible,
                      MIN(DISTINCT Tens_Disponible) AS BasDisponible,
     
           COUNT(*) AS Volume
     
    FROM TensionsMilli
    WHERE Data_Date >= '20120101'
     
    GROUP BY DateHeure
    ORDER BY DateHeure ASC
    Cette requête me renvoie correctement les valeurs attendues, ainsi que le regroupement par minute. Là où je coince, c'est que j'aimerais connaître les valeurs des rubriques Tens_Demande et Tens_Disponible, à la fois au début de la minute, et à la fin de la minute, exemple :

    La minute de 20120102 180000000 à la fin, soit 20120102 180059999 contient 76 records :
    Je souhaite donc connaître les valeurs de Tens_Demande et Tens_Disponible du 1er record du groupe de cette minute, et ces mêmes valeurs du dernier record du groupe.

    Merci de votre aide,

    LeTigre30

  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,

    Pourquoi ne pas utiliser des colonnes de type DATETIME pour stocker des dates et des heures ? vous y gagneriez en simplicité d'écriture des requetes, mais surtout en performances...

    Pour votre problème, de façon générale il vous faut refaire des jointures sur la table avec les date min et max de votre intervalle pour obtenir les valeurs qui correspondent, mais selon votre SGBDR (quel est-il ?), il peut y voir des solutions plus simples

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Bonjour à ceux qui m'ont répondu,

    Concernant la rubrique DateHeureLLL, c'est une clé unique contanant la date ainsi que l'heure y compris les millièmes de secondes.

    La base utilisée est Windev HF7, accédée via l'outil maison WDSQL (v18).

    Par contre je n'ai pas bien compris comment récupérer dans le résultat, les 4 données qui me manque, càd. :
    au début de la période minute*1 '20120101180000000', Tens_Demande & Tens_Disponible
    et à la fin de la période minute*1 '20120101180059999', Tens_Demande & Tens_Disponible

    idem pour une période portant sur 5 minutes :
    au début de la période minute*5 '20120101180000000', Tens_Demande & Tens_Disponible
    et à la fin de la période minute*5 '20120101180459999', Tens_Demande & Tens_Disponible.

    J'utilise RPAD pour compléter par deux '0' chaque fin de minute*1, pour le moment.

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/05/2007, 12h57
  2. RegExp: Récupérer une valeur en début de chaine
    Par pekka77 dans le forum Langage
    Réponses: 8
    Dernier message: 23/08/2006, 16h07
  3. Début et fin de semaine
    Par lebulls dans le forum Langage
    Réponses: 3
    Dernier message: 07/07/2006, 06h52
  4. [AJAX] IE coupe début et fin de chaine
    Par julien.63 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/07/2006, 17h39
  5. transférer une valeur du début à la fin
    Par arti2004 dans le forum Langage
    Réponses: 12
    Dernier message: 24/05/2006, 18h19

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