banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

#1 Thu 15 September 2005 11:56

Marc
Membre
Lieu: Lorient
Date d'inscription: 24 Jun 2005
Messages: 988

Requete trop longue !

Bonjour,

J'essaye de faire passer cette requete dans Mapinfo, mais au bout d'une heure j'ai estimé que c'etait un peu trop long.
une idée pour optimiser ça ?

"select * from matable where num_c not in (select num_c from matable where annee < 2005)"


Marc


Marc ROSSI

Hors ligne

 

#2 Thu 15 September 2005 14:28

Maurice
Membre
Lieu: Montpellier
Date d'inscription: 5 Sep 2005
Messages: 5331

Re: Requete trop longue !

Bonjour,
Ca parait effectivement un peu compliqué et il serait plus simple et équivalent de demander:
select * from matable where annee >= 2005
  ou ''2005'' si annee est en caractère
Une sous sélection (nb: qui s'exécute en premier) n'a d'intérêt que si elle porte sur une autre table
Cependant je ne vois pas pourquoi il n'y a aucun résutat après 1h: matable est-elle si 'lourde' ?
Bon courage

Hors ligne

 

#3 Thu 15 September 2005 18:15

jplartigau
Juste Inscrit !
Date d'inscription: 13 Sep 2005
Messages: 2

Re: Requete trop longue !

Bonjour a tous

Petite info pour la lecture generale de mes messages,
je ne mets plus d'accent sur mes catracteres car je lis de caracteres asiatiques ...

Pour reprendre le probleme j'ai surtout l'impression que Mapinfo a beaucoup de mal a effectuer une requete avec la condition    not

Le plus simple et de ne pas faire le not puis ensuite d'inverser la selection (cela existe depuis la version 6.5  ou 7.0  je ne sais plus trop). Cela marche avec juste l'inconvenient est de ne pas pouvoir nommer clairement le resultat de cette derniere requete (inversion de selection).

Voila bonne soiree

Hors ligne

 

#4 Thu 15 September 2005 23:01

Marc
Membre
Lieu: Lorient
Date d'inscription: 24 Jun 2005
Messages: 988

Re: Requete trop longue !

Bonsoir,

En fait la table est effectivement assez lourde.
3 champs: num_c /  anneemois / num_f, mais beaucoup d'enregistrements

je cherchai a recuperer tous les client qui ont fait une commande en 2005, mais qui n'ont pas fait de commande avant 2005 (les nouveaux client quoi) d'ou:

select * from matable where anneemois > 200412 and num_c not in (select num_c from matable where anneemois < 200501)

Mais effectivement j'ai abandonné et finalement j'ai fait ma requete dans BO avant d'exporter le resultat dans Mapinfo wink

Merci tout de meme pour votre aide

marc


Marc ROSSI

Hors ligne

 

#5 Fri 16 September 2005 14:27

William Sol
Juste Inscrit !
Date d'inscription: 5 Sep 2005
Messages: 6
Site web

Re: Requete trop longue !

T'aurais pas oublie d'indexer les champs anneemois et num_c

Hors ligne

 

#6 Mon 19 September 2005 13:58

Marc
Membre
Lieu: Lorient
Date d'inscription: 24 Jun 2005
Messages: 988

Re: Requete trop longue !

T'aurais pas oublie d'indexer les champs anneemois et num_c


Non, non, c'est la premiere chose que j'ai faites


Marc ROSSI

Hors ligne

 

#7 Mon 19 September 2005 21:32

Damien BEAUSEIGNEUR
Participant assidu
Lieu: meyzieu
Date d'inscription: 5 Sep 2005
Messages: 425

Re: Requete trop longue !

La lenteur vient du in il doit reproduire chaque enregistrement contenu dans la sélection de la parenthèse pour valider le résultat.
càd m test de validation m étant le nombre de résultat contenu dans la sélection du in pour valider un non
pour valider un in sans not il en faut la moitié en moyenne

Sans compter les doublons prévisible dans le select et autre cela peut durer longtemps.


Une solution au probleme serai de grouper les résultats par num_c, ensuite de récupérer le minimum de la colonne anneemois pour ce groupement, d'enregistrer ce résultat sous forme de table.
Et d'utiliser cette table créée pour obtenir le résultat voulu

select num_c, min(anneemois) as minimum from matable group by num_c into tabletemp

select * from matable, tabletemp where matable.num_c = tabletemp.num_c and tabletemp.minimum >= 200501

Nb cette requete donne toutes les enregistrement des nouveaux clients avec éventuellement des doublons, si un client peut avoir 2 enregistrements ou plus la même année.

Pour récupérer seulement la liste des clients utilisez:

select * from tabletemp where  minimum >= 200501

Hors ligne

 

Pied de page des forums

Powered by FluxBB