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 :

Requête sql pour afficher une somme


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 99
    Points : 59
    Points
    59
    Par défaut Requête sql pour afficher une somme
    Bonjour,

    J'ai besoin d'aide pour faire une requête permettant de calculer la durèe de sauvegarde par plateforme. je m'explique:

    * J'ai une table "Job"avec les champs suivant:

    1 -IdJob
    2- Nom_client (client à sauvegarder)
    3- Nom_serveur (de sauvegarde)
    4- date début (début sauvegarde)
    5- date fin
    6- durèe de sauvegarde (voir la requête)
    7- vendor_name
    8- job_stat_name
    Voici ma durèe:
    FROM_UNIXTIME(job.start_time, '%d/%m/%Y %H:%i:%s') start_time,
    FROM_UNIXTIME(job.end_time, '%d/%m/%Y %H:%i:%s') end_time,
    SEC_TO_TIME(job.end_time - job.start_time) duration,

    * J'ai une table avec le statut des job terminé (vendor_status) dont les champs sont les suivants:

    1- vendor_status_id : dans cette ordre correspond au nom vendor (0, 1, 2, 3)
    2- vendor_name: (successfull, warning, uknown, critical)

    * Une autre table avec le statut des job (job_state)

    1- job_stat_id: (0, 1, 2, 3)
    2- Job_stat_name (Queued, Active, Wait for retry,done)

    La contrainte est la suivante: je calcule uniquement les job qui sont "done" avec un statut "successfull" ou "warning"

    where
    job.`vendor_name` = vendor_status.`vendor_status_id `
    AND job.`vendor_status`in (0,1)
    AND job.`job_state` = job_state.`job_state_id`

    Désolé pour la longueur de mon message, j'espère avoir une solution.

    Rappel: calculer la durès de sauvegarde par plateforme

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Bonjour,

    Pour ma part je ne comprends pas bien votre modèle.
    Dans la table job, les colonne vendor_name et job_stat_name référencent les colonnes vendor_name et job_stat_name des tables vendor_status et job_state?
    Si oui, c'est modélisé à l'envers, il aurait fallu référencer les ID.
    Si non, les noms de ces colonnes sont plutot mal choisis.

    Enfin, la colonne job.vendor_status qui apparait dans votre clause where n'est mentionnée nulle part dans votre description.
    De plus, je vois pas bien le problème que peut vous poser vos conditions, d'après votre explication il semble qu'ajouter "AND job.job_stat_name = 'done'" pourrait suffire.

    Donnez nous des infos plus précises avec les DDL de vos tables (ordre CREATE TABLE ...), la requête complète que vous avez essayé et non pas seulement un bout de clause WHERE, et idéalement un extrait des données svp, ça permettra de mieux comprendre.

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 99
    Points : 59
    Points
    59
    Par défaut
    merci pour votre réponse,

    ci-joint un extact de mes tables.

    Nom plateforme je le récupère à partir de plusieur tables (tables références),

    je veux juste faire donc la requête pour me sortir les stats de durèe de sauvegarde par Plateforme.

    Merci
    Fichiers attachés Fichiers attachés

  4. #4
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 99
    Points : 59
    Points
    59
    Par défaut
    Désolé, j'ai oublié le script de création:

    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
    CREATE TABLE `tb_job` (
      `job_internal_id` int(11) unsigned NOT NULL auto_increment,
      `job_id` int(11) unsigned NOT NULL,
      `job_alarm` smallint(6) unsigned default NULL,
      `job_state` smallint(6) unsigned NOT NULL default '0',
      `job_product_status` smallint(6) unsigned default NULL,
      `job_type_id` int(11) unsigned NOT NULL,
      `data_type` varchar(128) NOT NULL default '0',
      `inst_client_id` int(11) unsigned NOT NULL,
      `inst_server_id` int(11) unsigned NOT NULL,
      `client_name` varchar(128) default NULL,
      `server_name` varchar(128) default NULL,
      `start_time` int(11) NOT NULL,
      `end_time` int(11) NOT NULL,
      `data_volume_kb` int(11) unsigned NOT NULL default '0',
      `job_percent` smallint(6) unsigned default NULL,
      `number_files` int(11) unsigned NOT NULL default '0',
      `job_desc` varchar(64) NOT NULL default '',
      PRIMARY KEY  (`job_internal_id`),
      UNIQUE KEY `job_id` (`job_id`,`inst_server_id`),
      KEY `idx_server_name` (`server_name`),
      KEY `idx_job_id` (`job_id`),
      KEY `idx_client_name` (`client_name`),
      KEY `idx_data_type` (`data_type`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 COMMENT='Table des operations de sauvegarde/restaure' AUTO_INCREMENT=2549 ;

    Comme vous le voyez, il n'y a pas de champ PFS, mais je l'ai rajouter au tableau pour vous simplier les choses (en suposant que la palateforme est stocké dans la table job).

    Merci

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Bonjour,

    Si j'ai bien saisi, vous pouvez essayer ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT 
         job.PFS,
         SEC_TO_TIME(SUM(job.end_time - job.start_time)) as DureeSvgPlateforme
    FROM Job
    WHERE job.job_state = 3
      AND job.job_alarm IN (0,1)
    GROUP BY job.PFS

  6. #6
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 99
    Points : 59
    Points
    59
    Par défaut
    ok merci bcp, je vais essayé cette requête.

  7. #7
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 99
    Points : 59
    Points
    59
    Par défaut
    C'est bon, ca marche.

    Merci beaucoup pour votre aide, voici ma requête pour ceux qui auront peut-être des difficultés comme moi:

    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
    select 
        FROM_UNIXTIME(j.start_time, '%d/%m/%Y %H:%i:%s')start_time, 
        FROM_UNIXTIME(j.end_time, '%d/%m/%Y %H:%i:%s') end_time,
         pf.`pf_alias`, j.`client_name`,
        sec_to_time(sum(j.end_time - j.start_time)) duration
     
    from
         `tb_job` j,
         `tb_job_alarm` al, 
        `tb_job_state` st,
        `host` h,
        `tb_host_relations` arh,
        `tb_resources` ar
     
     where
        j.`job_alarm` = al.`job_alarm_id`
        AND j.`job_alarm` in (1,2)    
        AND    j.`job_state` = st.`job_state_id`
        AND h.`host_id` = arh.`host_host_id`
        AND arh.`res_id` = ar.`res_id`
             AND j.`end_time` != 0
    GROUP BY  pf.`pf_alias`

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Requête SQL pour charger une structure récursive
    Par FMaz dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 19/07/2009, 05h00
  2. [MySQL] Requête SQL pour afficher des "Related Items"
    Par neoweiter dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 15/07/2009, 14h15
  3. Requête SQL pour remplir une zone de texte déroulante
    Par uranium-design dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 17/10/2007, 12h15
  4. Requête SQL pour insérer une donnée BINAIRE ?
    Par Najdar dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 22/05/2006, 10h21
  5. Requête SQL pour afficher un tri
    Par arnaud_verlaine dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/11/2005, 15h27

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