Somme en sql

re coucou!!!

je vous explique le probleme:
en fait j'ai dans ma base un champs duree de type TIME
et en fait, je voudrais simplement savoir comment on fait une requete qui donnerais la somme des durées
un truc dans ce genre:

$somme="SELECT SUM FROM appels WHERE 1 AND nom_diplomat LIKE '$nom_diplomat' AND dates LIKE '$date'
AND dates BETWEEN '$date1' AND '$date2' ";

l'informatique ca rend fou!!!!!

10 réponses

  1. Salut,

    J'ai eu le même genre de soucis, en fait tu passer par des fonction MySQL :
    TIME_TO_SEC(tonchamptime) -> renvoie la valeur de ton champ HH:MM:SS en seconde
    et l'inverse
    SEC_TO_TIME(valeurenseconde) -> renvoie HH:MM:SS d'une valeur en seconde

    Avec ça tu peux combiner une somme : si tu veux ajouter 2 champs de temps :
    SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(champ1) + TIME_TO_SEC(champ2))) FROM table

    Cela te renverra un HH:MM:SS de la somme de tes deux champs

    Ensuite si tu ne veux que l'heure et les minutes, tu peux utiliser HOUR(tonchamp) et MINUTE(tonchamp)

    Donc si tu l'appliques à la requete ci dessus, ça devrai donner un truc dans le genre :
    SELECT HOUR(SEC_TO_TIME(SUM(TIME_TO_SEC(champ1) + TIME_TO_SEC(champ2)))),
    MINUTE(SEC_TO_TIME(SUM(TIME_TO_SEC(champ1) + TIME_TO_SEC(champ2))))
    FROM table

    Pour info, il existe aussi des fonctions MySQL pour calculer la différence entre deux date : DATEDIFF et entre deux time : TIMEDIFF (cherchez sur le net).

    Voilà,
    bon courage à tous,

    Simon.
    1. bon, je repose ma question simplement:

      y a t'il un moyen de faire la somme de plusieur durée(qui sont a la base en n'importe quel format HH:MM ou MIN....) et de recuperer un resultat sous forme HH:MM?????????

      l'informatique ca rend fou!!!!!
      1. moi je pourrait te dire comment faire en php mais en sql ...

        desoler !

        rucht ( qui est a sa 1 ere anner de prog ...)
        1. ba propose toujours, ca peut peut etre marcher en php..
          faut voire si c'est adaptabe avec ma page

          l'informatique ca rend fou!!!!!
        2. @layorktu utilise " substr($date,0,4) " pour recupere ce qui t' interresse ( le heure puis les minute)
          t' ajoute les minute
           while ( $min =< 60)
            {
          
          $min-=60;
          $heure+=1;
          }
          


          puis les heure
          et sa doit marcher ( il y aura des truck a modif mais bon ...)

          rucht ( qui aide comme il peut )
      2. c es lker et net, mais c'est pas possible malheuresemet car pour le technicien, c est bien plus facile de rentrer en HH:MM
        et c'est ausi bien plus parlant

        l'informatique ca rend fou!!!!!
        1. peut etre faut il que je transforme mon champs TIME en VARCHAR
          et que ensuite, je fasse un traitement hp pour calculer
          mais ca s annonce tres tres tres rude!!!
          vu que le temps est rentré sous cette forme HH:MM
          rien que d'y pencer ca me fatigue!!

          l'informatique ca rend fou!!!!!
          1. si tu recupere plutot le resultat en minute le calcul serai grandement faciliter !!

            rucht ( qui cherche toujour la facilliter )
        2. tout d'abord, un diplomat, dans mon cas, n'est pas un homme politique, mais un serveur :p
          je suis pas espion;)(dommage..)
          et en fait c es un site pour support technique ou on entre tous les appels, et apres on peut faire des recherche des appels recu, par client, par date....
          et en fait, apres j affiche le resultat de la recherche
          et je voudrais que lors de cette affichage, il calcul la durée, en sachant que pour la durée, j ai creer un champs TIME

          apres, e sais pas si c es possible d'aditionner des TIME, et si oui, je sais as comment faire

          sinon, je suis preneur pour d'autres solution

          pour l'histoire de faire une autre page, ca ne me convient pas, v qe je veut afficher le temps sur la meme page ou j'affiche le resultat de la recherche...dommage:(

          l'informatique ca rend fou!!!!!
          1. Salut,
            tout d abord j aimperais preciser que la BSD n est pas mon fort ;
            mais j aurias une suggestion qu elle me paraît intersssante:
            Tu pourrais essayer un Groupe By pour ta dernière requète: le and final.

            Voilà , c est tout j esoere que ca te sera qd meme util.
            aurevoir et @+
            1. j ai regardé et en fait TIME c'est au format HH:MM:SS
              pour la difference entre 2 date c es le type DATE qui est en AAAAMMJJ
              le probleme risque d'etre que time c'est l'heure, et nom une durée

              donc en fait, si quelqu'un a une meilleur idée, je sus preneur

              en fait dans un champs on rentre la durée d'un appels sous cette forme:
              1h20, mai j ai remplacé le "h" par":"
              et donc j aimerais faire la somme des temps

              es-ce possible??

              l'informatique ca rend fou!!!!!
              1. tu veut donc faire la somme totale des appel d' un diplomate ( vive l' espionnage !! ;-p ) ?

                moi je te conseille de faire sa dans une page php ( sa sera plus facile a prog ) mais je pence que tu peux arriver a faire sa directement en requete sql ( mais perso je sais juste que sql sait faire les addition ) !

                rucht ( qui aure ete bien espion si y faler pas faire de sport ;p )
            2. Modérateur
              mm... a priori un champ de type TIME ne contient pas une durée mais une date. C'est pas la même chose.

              durée = différence entre 2 dates.

              Si tu as une colonne qui contient une durée, ça donnerais:
              SELECT identifiant_diplomate, sum(duree)
              FROM appels
              WHERE nom_diplomat LIKE '$nom_diplomat'
              AND dates BETWEEN '$date1' AND '$date2'
              GROUP BY identifiant_diplomat


              ça te donnera la durée totale diplomate par diplomate.