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

Requêtes PostgreSQL Discussion :

Trouver des points proches avec un champ contenant une différence


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Points : 122
    Points
    122
    Par défaut Trouver des points proches avec un champ contenant une différence
    Salut à toutes et à tous,

    Soit la requête SQL suivante qui me permet de trouver les points qui ont un PCode différent et qui sont à moins de 5cm de distance :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT tmp_flv_2795.nopoint :: integer, tmp_flv_2795.pcode, tmp.nopoint :: integer, tmp.pcode
    FROM tmp_flv_2795 INNER JOIN tmp_flv_2795 AS tmp
        ON tmp_flv_2795.pcode <> tmp.pcode AND st_dwithin(tmp_flv_2795.pointgeom, tmp.pointgeom, 0.05)
    ORDER BY tmp_flv_2795.nopoint :: integer, tmp.nopoint :: integer;
    La requête fonctionne bien mais j'aimerais l'améliorer.
    Pourquoi ?
    Sur une table de 22000 points, j'ai 282 points qui sortent.
    Toutefois, ces points sont "groupés". Il y en a toujours minimum 2, mais parfois plus.
    En effet, si le point 55 est à 4cm du point 67 et avec un PCode différent, je vais avoir le point 55 qui va sortir, mais aussi le point 67, ce qui est normal. Et il y a peut-être un 3ème point, un 4ème ou un 25ème point dans le même "spot".

    Comment pourrais-je numéroter (ou toute autre façon de les distinguer), les différents "spots" où plusieurs points sont dans le même rayon et avec au moins 2 Pcodes différents dans le "tas" de points ?

    Merci de vos z'avis z'avisés,
    JM
    Images attachées Images attachées  
    Il n'y a pas de problèmes. Il n'y a que des solutions.
    Malheureusement, elles sont parfois un peu dur à trouver ...


    Aucune touche n'a été maltraitée pour réaliser ce texte.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 761
    Points : 52 547
    Points
    52 547
    Billets dans le blog
    5
    Par défaut
    Utilisez une fonction de fenêtrage de type RANK() avec dans la clause OVER un PARTITION BY sur le point de référence et dans le ORDER BY la distance.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Points : 122
    Points
    122
    Par défaut
    Ah, je ne connais pas les fonctions RANK(), OVER et PARTITION BY.
    Je vais chercher de l'info sur ces fonctions.

    Merci,
    JM
    Il n'y a pas de problèmes. Il n'y a que des solutions.
    Malheureusement, elles sont parfois un peu dur à trouver ...


    Aucune touche n'a été maltraitée pour réaliser ce texte.

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 761
    Points : 52 547
    Points
    52 547
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Jean-Marc68 Voir le message
    Ah, je ne connais pas les fonctions RANK(), OVER et PARTITION BY.
    Je vais chercher de l'info sur ces fonctions.

    Merci,
    JM
    À me lire : http://sqlpro.developpez.com/article...clause-window/

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Bonjour,

    Il est également possible, sous PostgreSQL, d'utiliser une recherche KNN.
    Voir explication dans le document suivant : http://www.sai.msu.su/~megera/postgr...con-2010-1.pdf

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

Discussions similaires

  1. Trouver des points proches avec un champ contenant une différence
    Par Jean-Marc68 dans le forum Accès aux données
    Réponses: 1
    Dernier message: 07/06/2016, 19h36
  2. [AC-2003] table avec un champs contenant une liste déroulante
    Par maclolo2 dans le forum IHM
    Réponses: 16
    Dernier message: 01/10/2012, 20h23
  3. Réponses: 11
    Dernier message: 27/10/2008, 09h15
  4. Fonction permettant de trouver des mots proches ?
    Par Richard_Rahl dans le forum Langage
    Réponses: 2
    Dernier message: 25/08/2008, 14h21
  5. trouver des ports libre avec python
    Par xxiemeciel dans le forum Réseau/Web
    Réponses: 2
    Dernier message: 30/07/2007, 16h41

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