Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1265 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Lister un historique en supprimant les doublons

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Lister un historique en supprimant les doublons

n°1380113
besco
Posté le 02-06-2006 à 17:47:50  profilanswer
 

Bonjour,
 
J'ai un souci pour traduire la reponse en SQL (je travaille avec Oracle 9i)
 
Voilà ma table:
 
1 , 1 , 1 , 29/05/2006
1 , 1 , 1 , 30/05/2006
1 , 1 , 2 , 31/05/2006
1 , 1 , 1 , 01/06/2006
 
Le resultat de ma requête doit me retourner la ligne 1 , 1 , 1 , 30/05/2006
 
Il s'agit en fait d'une table d'historisation. Je ne veux donc pas garder 1 , 1 , 1 , 30/05/2006 puisqu'il s'agit de la même ligne que la précèdente.
Par contre, je conserve toutes les autres lignes pour suivre qu'une colonne est passé à 2 le 31/05/2006 puis à 1 le 01/06/2006. C'est compris ?
 
Merci si vous avez une réponse, je me casse la tête depuis ce matin...


Message édité par besco le 03-06-2006 à 10:33:22
mood
Publicité
Posté le 02-06-2006 à 17:47:50  profilanswer
 

n°1380122
Nikosinus
Tu aimes les glaces, canard ?
Posté le 02-06-2006 à 17:55:38  profilanswer
 

Comment veux tu que ça te retourne qqch que tu souhaite enlever de ta table... ?
Ou alors, j'ai pas compris...

n°1380161
besco
Posté le 02-06-2006 à 19:08:30  profilanswer
 

une fois que j'aurai les lignes que je veux, je ferais le Delete.
tu n'as pas une idée sinon ..

n°1380162
mrbebert
Posté le 02-06-2006 à 19:15:57  profilanswer
 

Il y a peut être moyen en faisant une jointure entre la table et elle même. Du genre :
SELECT *
FROM la_table AS A, la_table AS B
WHERE A.col1=B.col1 AND A.col2=B.col2 AND A.col3=B.col3 AND B.la_date > A.la_date
 
Qui permet de trouver des lignes ayant les même 3 premières colonnes avec une date supérieure [:figti]  
Mais ca pose problème avec la ligne du 01/06 :pt1cable:

n°1380167
besco
Posté le 02-06-2006 à 19:33:38  profilanswer
 

et oui, ça ne resoud pas mon problème mais c'est un début.
 
d'autres idées svp

n°1381065
kalex
Posté le 05-06-2006 à 00:18:22  profilanswer
 

Un simple GROUP BY .., .., ...  ne ferait pas l'affaire ?

n°1381083
moonboot
Posté le 05-06-2006 à 06:10:40  profilanswer
 

kalex a raison, un group by devrait suffire :
select a, b, c, max(date)
from table
group by a, b, c

n°1381174
besco
Posté le 05-06-2006 à 10:40:56  profilanswer
 

non. j'aurai pas eu besoin de poster si ce n'etait que ça.
 
Relisez bien le problème.

n°1381195
moonboot
Posté le 05-06-2006 à 11:19:48  profilanswer
 

oui en effet j'avais mal lu.
regarde du cote des fonctions analytiques sous oracle, il y en a pas mal et ca devrait t'aider. j'ai pas la doc sous les yeux la mais je suis sur que tu dois pouvoir le faire avec.

n°1381864
besco
Posté le 06-06-2006 à 10:54:12  profilanswer
 

Je veux bien quelques explications pour démarrer si tu en as (pour mon exemple)

mood
Publicité
Posté le 06-06-2006 à 10:54:12  profilanswer
 

n°1382027
moonboot
Posté le 06-06-2006 à 13:44:48  profilanswer
 

je suis pas sur d'avoir tout saisi pour ce que tu veux faire en relisant l'enonce de ton probleme :
 
que veux tu garder comme ligne  ? :
celles la ?
1 , 1 , 2 , 31/05/2006  
1 , 1 , 1 , 01/06/2006  
 
et dans le cas ou ta liste serait plus complique du style :
1 , 1 , 1 , 29/05/2006  
1 , 1 , 1 , 30/05/2006  
1 , 1 , 2 , 31/05/2006  
1 , 1 , 1 , 01/06/2006  
1 , 1 , 2 , 02/06/2006  
1,  1 , 3 , 03/02/2006
1 , 1 , 1 , 04/06/2006  
 
que faut il garder ?
 
 
 
 
 
 

n°1382120
fifiz
Posté le 06-06-2006 à 15:11:26  profilanswer
 

si j'ai bien compris tous sauf  1 , 1 , 1 , 30/05/2006  
en fait en résonnant par différence par rapport a la date précédente
on supprime toutes les instances dont la différence est égale à 0 :
 
1 , 1 , 1 , 29/05/2006  (+1)
1 , 1 , 1 , 30/05/2006  (  0)
1 , 1 , 2 , 31/05/2006  (+1)
1 , 1 , 1 , 01/06/2006  (-1)
1 , 1 , 2 , 02/06/2006  (+1)
1,  1 , 3 , 03/02/2006  (+1)
1 , 1 , 1 , 04/06/2006  (-2)
 
Par contre je ne sais pas du tout comment construire une requete de ce type.

n°1382759
moonboot
Posté le 07-06-2006 à 12:03:02  profilanswer
 

la fonction lag ou lead d'oracle doit pouvoir faire cela c'est a dire calculer cette difference pour chaque ligne.
il suffirait ensuite de virer les lignes dont la difference est nulle.
 
j'ai pas ma doc oracle donc je peux pas faire la requete, mais en cherchant un peu avec google, tu devrais trouver la syntaxe exacte.

n°1382767
orafrance
Posté le 07-06-2006 à 12:17:59  profilanswer
 
n°1384040
besco
Posté le 08-06-2006 à 19:50:15  profilanswer
 

J'ai trouvé un moyen en passant par du SQL simplement mais ton idée fifiz est vraiment bonne pour résoudre mon problème.
 
Que me conseillez-vous en terme de performances ?

n°1384061
mrbebert
Posté le 08-06-2006 à 20:20:37  profilanswer
 

besco a écrit :

J'ai trouvé un moyen en passant par du SQL simplement mais ton idée fifiz est vraiment bonne pour résoudre mon problème.
 
Que me conseillez-vous en terme de performances ?

C'est quoi ta solution :??:  
(ca m'intéresse :) )

n°1384469
polo021
Posté le 09-06-2006 à 13:53:54  profilanswer
 

select * from table t1 where exists (select * from table t2 where t1.c1 = t2.c1 and t1.c2 = t2.c2 and t1.c3 = t2.c3 and abs(t1.date - t2.date) > 1  );
 
si j'ai tout comprsi je pense que cela devrait fonctionner à condition que tu aies toujours une valeur par jour dans ta table


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Lister un historique en supprimant les doublons

 

Sujets relatifs
lister fichiers en fonction de l'état d'une celluleAcces - Lister les groupes d'utilisateurs associer àun formulaire
lister et compter les fichiers dans un dossier[ACCESS]Comment enlever les doublons d'un menu deroulant?
doublons dans fichier texteLister les périphériques usb installé
Lister les fichiers d'un répertoire à partir d'un smbclientsouci de doublons
input text et historique du navigateurLister tous les sous-repertoires
Plus de sujets relatifs à : Lister un historique en supprimant les doublons


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR