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 :

Suivre un parcours client en SQL (proc sql)


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 10
    Par défaut Suivre un parcours client en SQL (proc sql)
    Bonjour,

    Cela fais maintenant plusieurs jours que je suis coincé sur un problème.

    Je vous explique :
    J'ai une base de données qui retrace un parcours utilisateur dans 3 canaux différents (A, B et C). Un client peut emprunté 1 canal, 2 canaux, 3 ou plus. Ca va vraiment dépendre de lui. Il peut par exemple faire un chemin du type (A > B > B >A) comme (A > B ou B > C > A).

    La problématique est la suivante : j'aimerais pouvoir retourner les chemins les plus frequemment utilisés avec un nombre d'occurence à côté.

    Voici quelques petites preécisions sur la base de données :
    • Un client est associé à 1 id_projet qui comporte plusieurs applications (canaux)
    • Un client possède 1 id_client
    • Dans 1 projet client on peut avoir plusieurs applications client


    Voici un bout de la base de données :
    Id_client Id_Projet Nbr_App Projet_First_Channel App_First_Channel App_Creation_Date
    1000 2000 1 A A 10JANV2021
    1000 2000 1 B A 15JANV2021
    1100 2100 2 C C 05JANV2021
    1200 2200 2 A A 20JANV2021
    1200 2200 1 A B 21JANV2021
    1200 2200 1 A C 21JANV2021

    Pour être clair, le premier client (1000) possede 2 applications dont la première en empruntant le canal A et la deuxième B. Ses 2 applications sont dans le projet 2000. Son chemin est A > B.
    Le deuxième client (1100) a 2 applications en C dont son chemin est C > C.
    Le troisième (1200) possède 4 applications en tout suivant le chemin A > A > B > C

    J'espère que j'ai été clair, je veux vraiment pouvoir retourner un classement avec les chemins les plus empruntés.

    Merci d'avance pour votre aide.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    La réponse va dépendre du SGBD utilisé et de la disponibilité de la fonction d'agrégation de chaines
    En supposant que celle-ci est disponible, il est alors simple de construire le chemin d'un client (J'utilise ici la fonction d'Oracle, à adapter) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select  Id_client
        ,   Id_Projet
        ,   Projet_First_Channel || ' > ' 
        ||  listagg(App_First_Channel, ' > ') within group (order by App_Creation_Date)
    group by Id_client
        ,   Id_Projet
    ;
    Une fois que l'on dispose du chemin de chaque client toutes les possibilités de comptages, ordonnancement, statistiques sont ouvertes
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 10
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    La réponse va dépendre du SGBD utilisé et de la disponibilité de la fonction d'agrégation de chaines
    En supposant que celle-ci est disponible, il est alors simple de construire le chemin d'un client (J'utilise ici la fonction d'Oracle, à adapter) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select  Id_client
        ,   Id_Projet
        ,   Projet_First_Channel || ' > ' 
        ||  listagg(App_First_Channel, ' > ') within group (order by App_Creation_Date)
    group by Id_client
        ,   Id_Projet
    ;
    Une fois que l'on dispose du chemin de chaque client toutes les possibilités de comptages, ordonnancement, statistiques sont ouvertes
    Merci de ta réponse, j'utilise actuellement sas entreprise guide et la procédure proc sql. Tu penses qu'il est possible de retranscrire ton code avec proc sql ?

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 176
    Par défaut
    Bonjour,

    Comment tu détermines le chemin des canaux? Par exemple pour le client 1200, comment tu sais que c'est A > A > B > C ?

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 10
    Par défaut
    Citation Envoyé par vanagreg Voir le message
    Bonjour,

    Comment tu détermines le chemin des canaux? Par exemple pour le client 1200, comment tu sais que c'est A > A > B > C ?
    Grâce a la date de creation. Tu peux voir qu'il possède 2 applications dans le canal A le 20 janvier et les deux suivant juste après.

  6. #6
    Membre Expert
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 176
    Par défaut
    Oui mais la date est identique pour B et C, donc impossible de savoir si B est avant C où l'inverse. Tu n'as pas d'id plutôt, ou une date avec heure?

  7. #7
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 10
    Par défaut
    Citation Envoyé par vanagreg Voir le message
    Oui mais la date est identique pour B et C, donc impossible de savoir si B est avant C où l'inverse. Tu n'as pas d'id plutôt, ou une date avec heure?
    Oui effectivement tu as raison, il y a bien un ID_App qui permet de vérifier quelle app est la plus ancienne !

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

Discussions similaires

  1. Création d'une matrice carrée avec SQL et parcours de table SQL server
    Par ismahane.silhadi dans le forum Développement
    Réponses: 4
    Dernier message: 03/12/2014, 15h07
  2. Sortie sur la machine cliente, via SQL dynamique
    Par Dajon dans le forum Sql*Plus
    Réponses: 1
    Dernier message: 23/09/2011, 18h47
  3. Besoin d'aide pour parcours de table SQL Server
    Par Monkey_D.Luffy dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 09/06/2008, 09h40
  4. [Windev 9] - Souci de parcours de requete SQL
    Par jimbololo dans le forum WinDev
    Réponses: 1
    Dernier message: 26/05/2008, 17h32
  5. Parcours d'enregistrements SQL sous C# .NET ?
    Par gregcat dans le forum ASP.NET
    Réponses: 5
    Dernier message: 05/09/2007, 21h19

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