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

MySQL Discussion :

Sélection d'un seul enregistrement parmi une liste d'enr. arrivés dans un intervalle de temps


Sujet :

MySQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Décembre 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2015
    Messages : 2
    Points : 7
    Points
    7
    Par défaut Sélection d'un seul enregistrement parmi une liste d'enr. arrivés dans un intervalle de temps
    Bonjour,

    Je dispose de logs techniques stockées dans une table de base de données Mysql, qui recensent des tentatives de connexion téléphoniques à un centre d'appel. Chaque enregistrement de cette table contient
    • Un champ date : date_appel
    • Un champ n° de téléphone (n° de téléphone appelant) : num_client
    • Un point de connexion entrant (n° de téléphone appelé en l'occurrence) : num_crc
    • Une valeur fonctionnelle indiquant si la connexion a été prise en charge ou non. Ce champ peut prendre 3 valeurs : 0 (pas pris en charge parce qu'indisponible fonctionnellement), 1 (pris en charge avec succès) et 2 (pas pris en charge parce que fermé) : pris_en_charge


    La table en question est alimentée par un mécanisme de load-balancing d'appels téléphoniques, qui stocke toutes les tentatives d'appels entrants. Ce mécanisme tente d'acheminer un appel téléphonique vers un centre d'appel. Pour des raisons de robustesse de l'installation, un appel téléphonique est présenté jusqu'à 4 fois au centre d'appel, avant d'être acheminé sur une destination alternative. L'appel peut être décroché dès la première tentative par le centre d'appel (15% des appels), mais la plupart du temps, (85% donc) l'appel finit par être acheminé sur la destination alternative, sans être pris en charge par le centre d'appel. C'est un fonctionnement normal (le centre d'appel travaille en filtre des appels, il prend en charge ce qu'il peut et laisse filer le reste ailleurs). Ma table contient donc jusqu'à 4 enregistrements pour une tentative de prise en charge d'un appel entrant, cet 4 enregistrements étant répartis en général sur 5 secondes (cela peut être plus court).

    En considérant que pour un appel passé par un client et présenté au centre d'appel, ce dernier est interrogé jusqu'à 4 fois, sur un intervalle de 5s, par le même n° de téléphone appelant et sur le même n° de téléphone appelé, je souhaite récupérer une liste des appels passés réellement par les clients. Sur le jeu de données suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    + date_appel        + num_client + num_crc    + pris_en_charge       +
    +-------------------+------------+------------+----------------------+
    +2015-12-09 00:11:50+ 0123456789 + 0987654321 +                    2 +
    +2015-12-09 00:11:51+ 0123456789 + 0987654321 +                    2 + 
    +2015-12-09 00:11:53+ 0123456789 + 0987654321 +                    2 +
    +2015-12-09 00:11:54+ 0123456789 + 0987654321 +                    2 +
    Je souhaite donc ne récupérer qu'un seul enregistrement de cette liste.

    Une idée pour réaliser cette requête ?

    Merci d'avance.

    Cordialement.

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Si n'importe quel enregistrement convient, ajoutez seulement limit 1 à votre requête

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Décembre 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2015
    Messages : 2
    Points : 7
    Points
    7
    Par défaut
    Bonjour escartefigue,

    Je te remercie de t'intéresser à mon problème.

    J'ai du mal m'exprimer. Le jeu de donnée que j'ai exposé dans mon message initial est une partie infime des données qui se trouvent dans ma table des tentatives de connexion téléphoniques. J'ai en fait 50 000 lignes par jour dans cette table !

    Je suis à la recherche d'une requête me permettant d'extraire les appels réellement reçus des clients parmi les enregistrements présents dans cette table, sachant que :
    • Pour un appel reçu d'un client, il y a au moins une ligne dans ma table
    • Il peut y avoir jusqu'à 4 lignes dans ma table, concernant le même appel reçu du client (même n° appelant, même n° appelé), ces 4 lignes étant créées dans un intervalle de 5s.


    Sur une journée de travail (50 000 lignes environ dans ma table de logs), mon centre d'appel prend en charge 3 000 appels (qui correspondent à des tentatives d'appel prises en charge dès la première présentation à mon centre d'appel), et donc une seule ligne dans ma table de logs pour chacun de ces 3000 appels. J'ai besoin de compter le nombre d'appels clients effectifs, correspondant
    • aux 47 000 lignes de logs restantes de ma journée, au moyen d'une requête SQL dans ma table,
    • additionné aux 3000 appels pris en charge effectivement par mon centre d'appel

    pour obtenir le chiffre dont j'ai besoin.

    Me suis-je fait comprendre ?

    Cordialement.

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    Merci de votre indulgence, mais c'est aussi moi qui ai lu votre besoin en diagonale

    Voici une proposition que je n'ai pas testée, je n'ai pas de base de données sous la main, donc c'est écrit de mémoire
    Mais bon ça devrait le faire, à vous d'adapter en fonction de vos nom réels de colonnes (on ne parle pas de champs pour une base de données) et de table

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Select sum(TT.NBTOTAL), sum(TT.NBPRIS)
    From  (select 1 as NBTOTAL
                 ,case
                  when valfonc = 2
                       then 1
                       else 0
                  end as NBPRIS
           from MaTable) as TT

  5. #5
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 380
    Points : 19 062
    Points
    19 062
    Par défaut
    Salut klmpencran.

    Si tu veux compter le nombre d'appel, sachant que pour un appel donné, tu peux avoir au max quatre lignes, il suffit d'abord de déterminer ce qui est discriminant.
    Par exemple, je pense qu'il s'agisse du couple (numero ; crc), d'où :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select count(*)
    from ( select numero, crc
           from test
           group by numero, crc
         ) as x;
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

Discussions similaires

  1. [MySQL] Un seul email d'une liste "Bcc" n'arrive pas chez son destinataire
    Par patriciaprovence dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 12/02/2010, 08h55
  2. [AC-2007] Sélection automatique du seul élément d'une liste déroulante
    Par Beavis Man dans le forum VBA Access
    Réponses: 2
    Dernier message: 03/12/2009, 15h53
  3. Réponses: 6
    Dernier message: 19/12/2008, 09h52
  4. Réponses: 19
    Dernier message: 10/01/2007, 22h45
  5. Réponses: 10
    Dernier message: 15/12/2006, 07h34

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