Discussion: Aide sur une requete

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    juin 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : juin 2017
    Messages : 2
    Points : 1
    Points
    1

    Par défaut Aide sur une requete

    Bonjour à tous,
    en général j'arrive à me débrouiller seul en cherchant sur les forums mais la je cale et j'ai besoin d'une aide.

    J'ai une table qui possède plusieurs champs, dont un champ qui (texte), quand (date/heure) et un champ ou (texte)
    Voici un exemple
    -------------------------------
    | qui | quand |ou|
    |----+--------------------+--|
    |toto|18/03/2017 07:45:30|Z1|
    |----+--------------------+--|
    |dudu|18/03/2017 07:45:41|Z2|
    |----+--------------------+--|
    |toto|18/03/2017 07:46:10|Z1|
    |----+--------------------+--|
    |toto|18/03/2017 07:46:50|Z3|
    |----+--------------------+--|
    |dudu|18/03/2017 07:46:52|Z2|
    |----+--------------------+--|
    |toto|18/03/2017 07:47:30|Z3|
    |----+--------------------+--|
    |toto|18/03/2017 07:48:20|Z1|
    |----+--------------------+--|
    |toto|18/03/2017 07:49:30|Z1|
    |----+--------------------+--|

    j'ai besoin à l'aide d'une requete de connaitre le nombre de fois ou un utilisateur (champ 'qui') a changé de lieu (champ 'ou')
    En plus du nombre de fois, j'aurai besoin de connaitre la durée entre chaque changement de lieu

    Si on prend mon exemple, l'utilisateur toto a changé 2 fois de lieu, Z1 au démarrage puis Z3 à 07:46:50 puis Z1 à 07:48:20
    Il a mis 42s pour aller de Z1 à Z3 et 50s de Z3 à Z1

    Si un expert en requetes pouvait m'aider ca serait merveilleux.
    Merci à tous

  2. #2
    Membre expert Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    mai 2008
    Messages
    2 355
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mai 2008
    Messages : 2 355
    Points : 3 848
    Points
    3 848

    Par défaut

    Bonjour,

    Le nombre de changements est égal au nombre d'occurrences - 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select qui, count(*)-1 from matable group by qui
    La table des durées nécessite une sous-requete et un test qui vérifie que ce n'est pas le dernier changement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select qui, (select top 1 b.quand from matable b where b.qui=a.qui and b.quand>a.quand order by b.quand)-a.quand from matable a where exists (select * from matable c where c.qui=a.qui and c.quand>a.quand)
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    juin 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : juin 2017
    Messages : 2
    Points : 1
    Points
    1

    Par défaut

    merci beaucoup
    je teste ca tout de suite

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    août 2010
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : août 2010
    Messages : 202
    Points : 304
    Points
    304

    Par défaut

    Bonjour,

    une solution en numérotant chronologiquement les enregistrements.
    1) Créer cette requête qui sera nommée "rNumParcours" (Modifier deux fois le nom de la table "tParcours" par le nom de votre table) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT (SELECT COUNT(*) FROM tparcours WHERE qui=t.qui AND quand<t.quand) AS Num, qui, quand, ou
    FROM tParcours AS t
    Ensuite, à partir de cette 1ère requête on peut calculer les étapes et les temps, nommer cette requête "rParcours" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT R1.Qui, R1.ou AS Depart, R2.Ou AS Arrivée, cDate(R2.Quand-R1.Quand) AS Différence
    FROM rNumParcours AS r1 INNER JOIN rNumParcours AS R2 ON (R1.Num=R2.num-1) AND (R1.qui=R2.qui)
    WHERE R1.ou<>R2.ou
    Puis déduire de cette requête "rParcours" le nombre de changement de lieu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT Qui, Count(Qui) AS Changement
    FROM rParcours
    GROUP BY Qui
    Inconvénient : utilisable si le nombre de ligne de la table reste modeste (1000 maxi ?) car un peu lent à cause de la sous-requête dans rNumParcours


    Autre solution un peu plus rapide :
    1ère requête à nommer "rParcoursBase" (changer 2 fois le nom de la table !) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT t.qui, t.quand, (SELECT MAX(quand) FROM tparcours WHERE qui=t.qui AND quand<t.quand) AS Prec
    FROM tParcours AS t
    La requête pour les temps, à nommer "rParcours2" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT t1.qui, t1.ou As Départ, t2.ou As Arrivée, CDate(t1.Quand-t2.Quand) AS Différence
    FROM (tParcours AS t1 INNER JOIN rParcoursBase AS r ON t1.quand = r.quand AND t1.qui = r.qui) INNER JOIN tParcours AS t2 ON r.prec = t2.quand AND r.qui = t2.qui
    WHERE t2.ou<>t1.ou
    Pour compter les changements, c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT Qui, Count(Qui) AS Changement
    FROM rParcours2
    GROUP BY Qui

Discussions similaires

  1. [Debutant] Aide sur une requete normée
    Par Wisefool dans le forum Oracle
    Réponses: 2
    Dernier message: 14/04/2006, 19h41
  2. Besoin d'aide sur une requete ds un trigger
    Par ideal dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 15/02/2006, 11h05
  3. [MySQL] aide sur une requete
    Par dj-julio dans le forum Langage SQL
    Réponses: 5
    Dernier message: 12/01/2006, 15h25
  4. petite aide sur une requete INSERT INTO
    Par bonneti dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/03/2005, 16h17
  5. Aide sur une requete de sélection
    Par stephdiplo150 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/01/2004, 11h40

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