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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Aide pour une requête de maintenance

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Aide pour une requête de maintenance

n°1774098
grisensko
Posté le 18-08-2008 à 14:15:05  profilanswer
 

Bonjour,
 
je suis loin d'être un expert SQL et j'ai un problème au travail et j'ai besoin d'effectuer une requête complexe.
 
La Table en tres gros résumé...
-------------------
ID  | timestamp | valeur   | Description
1   | timestamp | 1         | Blah
2   | timestamp | 1         | Blah
3   | timestamp | 1         | Blah
4   | timestamp | 2         | Blah
5   | timestamp | 3         | Blah
6   | timestamp | 3         | Blah
7   | timestamp | 4         | Blah
8   | timestamp | 4         | Blah
9   | timestamp | 4         | Blah
10   | timestamp | 4         | Blah
11   | timestamp | 4         | Blah
12   | timestamp | 4         | Blah
 
 
Je dois parvenir a limiter la table a un maximum.
Je veux creer une procédure (Delete statement) qui me permettrait de faire la maintenance en me basant sur le champ Valeur (Max 2 2ID ayant cette valeur).
 
Dans l'exemple du haut il y a 3 entré avec la valeur 1 et 6 entré avec la valeur 4. Je devrais donc effacer les plus vieille affin de garder seulement 2 ID ayant la valeur 2.
 
La ou sa se complexifie s'est que je ne peux pas spécifier la database que j'utilise.  
Elle suporte le Limit, mais pas dans une requête imbriqué. ex.: (delete from table where not exist(select * from blah Limit 5))
 
Alors si quelqu'un pourrait m'aider a développer une procédure qui clean a la demande ou un trigger qui est fait avant chaque insert se serait très apprécié.
 
Merci

mood
Publicité
Posté le 18-08-2008 à 14:15:05  profilanswer
 

n°1774100
Elmoricq
Modérateur
Posté le 18-08-2008 à 14:20:21  profilanswer
 

Hmm... elle est zarb ta table. Ta clef c'est l'id ou la valeur ? [:opus dei]

 

Et sinon, pourquoi tout simplement ne pas te baser sur le timestamp ? S'il est trop vieux => poubelle. Ou archivage.
Ceci dit, la plupart des SGBD savent gérer plusieurs millions de lignes sans sourciller, hein.


Message édité par Elmoricq le 18-08-2008 à 14:21:08
n°1774125
grisensko
Posté le 18-08-2008 à 14:55:52  profilanswer
 

Ma clef s'est l'ID. mais oui je veux limiter selon le nombre de records ayant la même valeur. Et non, j'ai vraiment une limite de taille/performance.
(en 20 seconde je parviens a remplir mon stockage Max.)
 
Je ne peut pas me baser seulement sur le Timestamp, car je doit garder au minimum les 2 plus récents de chaque Valeur.

n°1774165
olivthill
Posté le 18-08-2008 à 16:23:39  profilanswer
 

Essayer la requête suivante (je l'ai testée sous Oracle).

Delete from table t1
where t1.timestamp <
 (select max(t2.timestamp) from table t2
   where t2.valeur = t1.valeur
     and t2.timestamp <  
   (select max(t3.timestamp) from table t3
     where t3.valeur = t2.valeur)
 )

n°1774210
esox_ch
Posté le 18-08-2008 à 17:31:25  profilanswer
 

ça risque pas de lui pêter à la gueule s'il dit qu'il a plusieurs autant de records?
ça va pas faire une floppée de full table?


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1774224
olivthill
Posté le 18-08-2008 à 18:00:37  profilanswer
 

Il n'y a pas de risque si l'on maitrise la situation.
La requête est relativement simple puisqu'elle n'a que huit lignes.
Elle prend tous les enregistrements sauf ceux du dernier et de l'avant dernier timestamp pour chaque valeur. Comme elle n'utilise pas "limit", elle me parait avoir un peu plus de chances d'être portable sur divers bases de données, que l'essai précédent.
 
Avant de mettre en place une requête delete, il est bien évidemment conseillé de la tester d'abord avec select.
C'est ce que j'ai fait, et cela marche bien avec ma base et mon environnement.


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

  Aide pour une requête de maintenance

 

Sujets relatifs
Aide pour schéma de base de donnéeRequete site web à la manière d'excel mais en plus grand
[VBA] requete SQL dans un programme VB pour publipostage vers word[ACCESS] Remplir une table a partir d'une requête SQL en VB
[MySQL]Aide pour recuperer des bbcodesvbs : besoin d'un aide pour un script d'ajout d'imprimante sous window
Besoin d'aide pour programmation simpleProblème avec requête
[Excel]Aide sur fonctions de rechercheBesoin d'aide pour un script
Plus de sujets relatifs à : Aide pour une requête de maintenance


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