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

SQL Firebird Discussion :

Aide écriture requete


Sujet :

SQL Firebird

  1. #1
    Membre habitué
    Aide écriture requete
    Bonjour,

    Soit T1 de la forme

    Col1 col2
    10h00 X1
    10h10 X2
    10h20 X3
    10h30 X4
    ...

    Soit T2 de la forme
    col1 col2
    10h01 St1
    10h04 St2
    10h09 St3
    10h11 St4
    10h14 St5
    10h32 St6
    10h38 St7
    10h42 St8
    ...

    Je voudrais ecrire une requete qui me retourne col1,col2 de T1 col2 de T2 pour les plages 10h00-10h10, 10h20-10h20,10h30-10h40... avec col2 qui vaut la valeur durant laquelle la durée de l'evenement dans col1 a été le plus long
    Cela donnerait

    col1 col2 col2
    10h00 X1 St2
    10h10 X2 St5
    10h20 X3 St6

    Je ne sais pas trop si c'est réalisable en requete SQL?

    Merci

  2. #2
    Membre expérimenté
    Tu pourrais donner le type de tes champs STP ?

  3. #3
    Membre habitué
    Excusez moi pour cet oubli

    Co1 de T1 et T2 sont des timestamp. Les autres sont des char

    Merci

  4. #4
    Membre expert
    tu es sûr de ton énoncé et des valeurs example que tu donnes ?

    parce que là je ne comprend pas ce que tu veux avec l'exemple que tu donnes
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

  5. #5
    Membre habitué
    J'ai une table T1 qui possede des enregistrements toutes les 10'
    J'ai une table T2 qui possede des enregistrements horodatés.
    Pour un evenement de T1 qui dure 10' par exemple de 10h à 10h10 je recherche l'évenement dans T2 qui a duré le plus longtemps.
    Dans mon exemple l'evenement qui a duré le plus longtemps entre 10h et 10h10 c'est St2 car il a duré de 10h04 à 10h09 et ainsi de suite pour les autres.

    Je recherche donc tous les enregistrements par pas de 10' issus de T1 (il faut que je récupere col2 de T1) pour lesquels T2 possede l'enregietrement qui a duré le plus longtemps dans cette meme plage de periode.

    Merci

  6. #6
    Membre expérimenté
    Ce n'est pas possible d'avoir une colonne 'durée' dans T2 ? Ça faciliterait les choses

  7. #7
    Membre expert
    Citation Envoyé par calou_33 Voir le message

    Je recherche donc tous les enregistrements par pas de 10' issus de T1 (il faut que je récupere col2 de T1) pour lesquels T2 possede l'enregietrement qui a duré le plus longtemps dans cette meme plage de periode.
    hum certes, mais c'est quoi le lien entre T1 et T2 ?

    parce qu'avec tes explications pour moi le résultat serait :
    col1 col2 col2
    10h00 X1 St3
    10h10 X2 St5
    10h20 NULL NULL
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

  8. #8
    Membre habitué


    Ca serait 10H20 x3 St5
    Les tables ont des champs communs qui sont NOM_PROJET et REF_CLIENT
    Je recherche donc tous les enregistrements des projets Px possedant les REF_CLIENT RCx classés par pas de 10' dans lesquels l'evenement Stx a duré le plus longtemps.

    L'autre difficulté c'est que si dans une periode 10' on n'a pas d'enregistrements dans T2 cela signifie que l'etat n'a pas été changé il faut donc aller voir l'enregistrement précédent pour connaitre l'état à faire remonter!!

    Merci

  9. #9
    Membre expert
    Si tes événements (stx) ont un code croissant, quelque chose comme :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT T1.col1, T1.col2 , MAX(T2.col2) FROM T1
    JOIN T2 ON T2.col1<(DATEADD(10 MINUTE TO T1.col1))
    GROUP BY 1,2


    ou avec tes autres champs :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT T1.col1, T1.col2 , MAX(T2.col2) FROM T1
    JOIN T2 ON T2.col1<(DATEADD(10 MINUTE TO T1.col1))
    AND T1.NOM_PROJET=T2.NOM_PROJET 
    AND T1.REF_CLIENT=T2.REF_CLIENT
    WHERE T1.NOM_PROJET='bla' AND T1.REF_CLIENT='blabla' 
    GROUP BY 1,2


    sinon cela complexifie un peu les choses, mais c'est faisable
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

  10. #10
    Membre expérimenté
    Je suis d'accord avec cette requête
    Citation Envoyé par makowski Voir le message
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT T1.col1, T1.col2 , MAX(T2.col2) FROM T1
    JOIN T2 ON T2.col1<(DATEADD(10 MINUTE TO T1.col1))
    GROUP BY 1,2
    Le problème c'est qu'il veut le tuple de T2 oú l'heure du tuple suivant moins l'heure du tuple courant sera la plus grande. (enfin si j'ai bien compris ...)

  11. #11
    Membre expert
    Citation Envoyé par muad'dib Voir le message

    Le problème c'est qu'il veut le tuple de T2 oú l'heure du tuple suivant moins l'heure du tuple courant sera la plus grande. (enfin si j'ai bien compris ...)
    alors tu as mal compris ou pas tout lu :
    si dans une periode 10' on n'a pas d'enregistrements dans T2 cela signifie que l'etat n'a pas été changé il faut donc aller voir l'enregistrement précédent pour connaitre l'état à faire remonter
    Philippe Makowski
    IBPhoenix - Firebird
    Membre de l'April

  12. #12
    Membre habitué
    Merci Philippe

  13. #13
    Membre expérimenté
    Au temps pour moi