1. #1
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    octobre 2002
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : octobre 2002
    Messages : 63
    Points : 32
    Points
    32

    Par défaut Casse Tête pour Associer des individus

    Bonjour à tous,

    je me prend la tête pour retrouver la même personne.
    je m'explique j'ai 3 colonnes de différent canaux.
    Email, TelFix, TelPort

    J'aimerais pouvoir me flaguer dans une colonne toute les ligne qui sont en fait la même personne.
    Nom : Classeur1 - Excel.jpg
Affichages : 78
Taille : 18,3 Ko

    En gros j'aimerais me rajouter la colonne FLAG car toutes ces lignes sont la même personne ?

    HELP je vois pas comment faire sans partir sur une usine à gaz.
    Peut-être que les récursive pourraient m'aider mais sur 3 colonnes je ne sais pas comment faire.

    Merci d'avance
    cH.
    -> SGBR=SQL SERVER 2014 <-

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    octobre 2002
    Messages
    810
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2002
    Messages : 810
    Points : 871
    Points
    871

    Par défaut

    Bonjour,
    Je n'ai pas compris ce que tu voulais faire et sur quel critère tu déterminais qu'il s'agissait d'une même personne.
    Par ailleurs qu'est ce que ce flag.
    Cordialement
    Soazig

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    octobre 2002
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : octobre 2002
    Messages : 63
    Points : 32
    Points
    32

    Par défaut

    Bonjour Soazig,

    alors en fait chaque ligne est une entrée en base qui peut contenir 1,2 ou 3 canaux pas moins pas plus.
    on cherche a déterminer qui est la même personne ma colonne Flag (F1) pour identifier que tout les F1 sont la même personnes.

    comment on peux déterminer que c'est la même personne
    parce que chaque colonne canal peux contenir le même canal qu'une autre ligne.

    exemple :
    la ligne 1 et deux on exactement les même canaux. donc même personne.
    la ligne 3 même email donc même personne (F1 dans flag)
    sur la ligne 4 on trouve la même email mais avec un nouveau téléphone qui m'ouvre un autre champ de recherche sur cette personne via un autre téléphone ....
    etc...

    En fait je crois qu'il faut faire une boucle jusqu'a ce qu'il n'y ai plus de nouveaux canaux pour cette personne.
    mais du coup c'est une boucle inconnue qui peut faire 3 passage comme X


    voilà l'idée.
    cH.
    -> SGBR=SQL SERVER 2014 <-

  4. #4
    Membre confirmé Avatar de Sebwar
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    avril 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : avril 2012
    Messages : 170
    Points : 519
    Points
    519

    Par défaut

    Hello,
    quelle est la volumétrie de la table ?

  5. #5
    Modérateur

    Homme Profil pro
    Ingénieur d'études en décisionnel
    Inscrit en
    septembre 2008
    Messages
    7 665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études en décisionnel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : septembre 2008
    Messages : 7 665
    Points : 16 490
    Points
    16 490

    Par défaut

    Citation Envoyé par soazig Voir le message
    Je n'ai pas compris ce que tu voulais faire et sur quel critère tu déterminais qu'il s'agissait d'une même personne.
    Je pense que j'ai compris.
    On part de la première ligne, on voit qu'il y a un email et un téléphone.

    Toutes les lignes de la table ayant cet email (E1) ou ce téléphone (T1) sont la même personne.
    Mais on voit aussi un peu plus loin que E1 est associé à T2. Du coup c'est aussi la même personne (via E1), et tous ceux qui ont T2 comme téléphone sont aussi la même personne.
    Plus loin, TE1 est associé à T2, du coup toujours la même personne, et cetera.

    Je pense qu'une requête récursive ne suffit pas, il faut faire un programme qui va identifier une personne qui sera exécuté tant qu'il y a des lignes non flagées.
    Une boucle WHILE en T-SQL avec une requête récursive devrait faire l'affaire.

    En tout cas au niveau du modèle, c'est très mauvais ; je pense enfoncer une porte ouverte.

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    janvier 2010
    Messages
    4 827
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : janvier 2010
    Messages : 4 827
    Points : 9 875
    Points
    9 875

    Par défaut

    Bonjour,

    Je pense que ceci doit fonctionner (j'ai ajouté quelques données au jeu d'essai fourni pour obtenir d'autres groupes) :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    WITH LaTable(email, fixe, port) AS (
        SELECT		'E1', NULL, 'T1'
    UNION ALL SELECT	'E1', NULL, 'T1'
    UNION ALL SELECT	'E1', NULL, NULL
     
    UNION ALL SELECT	'E20', NULL, 'T10' 
     
    UNION ALL SELECT	'E1', NULL,  'T2'
    UNION ALL SELECT	NULL, 'TE1', 'T2'
    UNION ALL SELECT	'E2', NULL, 'T2'
    UNION ALL SELECT	'E3', NULL, 'T2'
    UNION ALL SELECT	'E2', 'TE1', NULL
    UNION ALL SELECT	NULL, 'TE1', 'T3'
    UNION ALL SELECT	NULL, NULL, 'T3'
     
    UNION ALL SELECT	'E10', NULL, 'T10'
     
    UNION ALL SELECT	'E30', NULL, 'T30'
    UNION ALL SELECT	'E40', NULL, 'T40'
    ),
    N AS (
        SELECT *, ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS num
        FROM LaTable
    ), Rec AS (
     
        SELECT Num, email, fixe , port, Num AS Ori, CAST(CONCAT(';', Num, ';') AS VARCHAR(MAX)) AS chemin 
        FROM N
        UNION ALL
        SELECT N.num, N.email, N.fixe, N.port, rec.Ori, CAST(CONCAT(rec.chemin, N.num, ';')AS VARCHAR(MAX))
        FROM	  Rec
        INNER JOIN N 
    	   ON N.email = Rec.email
    	   OR N.fixe = Rec.fixe
    	   OR N.port = Rec.port
        WHERE Rec.chemin NOT LIKE CONCAT('%;',N.num , ';%')
    )
     
    SELECT Num, email, fixe, port, MIN(ori) AS Groupe
    FROM Rec
    GROUP BY Num, email, fixe, port
    ORDER BY groupe, num

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    octobre 2002
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : octobre 2002
    Messages : 63
    Points : 32
    Points
    32

    Par défaut

    Citation Envoyé par Waldar Voir le message
    Je pense que j'ai compris.
    On part de la première ligne, on voit qu'il y a un email et un téléphone.

    Toutes les lignes de la table ayant cet email (E1) ou ce téléphone (T1) sont la même personne.
    Mais on voit aussi un peu plus loin que E1 est associé à T2. Du coup c'est aussi la même personne (via E1), et tous ceux qui ont T2 comme téléphone sont aussi la même personne.
    Plus loin, TE1 est associé à T2, du coup toujours la même personne, et cetera.

    Je pense qu'une requête récursive ne suffit pas, il faut faire un programme qui va identifier une personne qui sera exécuté tant qu'il y a des lignes non flagées.
    Une boucle WHILE en T-SQL avec une requête récursive devrait faire l'affaire.

    En tout cas au niveau du modèle, c'est très mauvais ; je pense enfoncer une porte ouverte.

    Salut Waldar oui c'est exactement ça.
    en fait ce n'est pas vraiment un modele.
    Il s'agit de base autonome d'envoi de campagnes et normalement elle on leur vie propre pendant un certain temps (temps de la durée de la campagne)
    Y'en a donc environ 100.000 base mySql
    Et la, on va dire que la GDPR secouent tout le monde et il me demande de pouvoir restituer les infos d'envoi d'un gars qui en fait la demande.

    Donc j'ai parsé toutes les bases pour rassembler des infos dans une table qui me permette de retrouver les personnes et les infos de chaque campagnes, en version simple c'est ce que j'ai donné comme table.
    quelques identifiants et nom de bases et serveur plus les canaux, ceux qui me pose probleme pour retrouver la même personne d'ou ma question...
    et c'est là que je me suis dis mais comment retrouver quelle info peut appartenir à la meme personne dans ce gros bordel, d'ou ma question...
    -> SGBR=SQL SERVER 2014 <-

Discussions similaires

  1. [Android] Where is Alice ? Des casse-têtes pour vous occuper des heures !
    Par metalm77 dans le forum Mon application mobile
    Réponses: 0
    Dernier message: 03/10/2016, 11h58
  2. casse tête pour choper des colones d'une requète ?:?
    Par hiul dragonfel dans le forum Débuter
    Réponses: 3
    Dernier message: 12/11/2009, 17h57
  3. Réponses: 20
    Dernier message: 02/02/2008, 22h14
  4. requête casse-tête pour une seule table..
    Par MikeV dans le forum Requêtes
    Réponses: 9
    Dernier message: 23/08/2007, 21h02
  5. Réponses: 2
    Dernier message: 26/07/2006, 12h46

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