Aide pour une requête de maintenance - SQL/NoSQL - Programmation
Marsh Posté le 18-08-2008 à 14:20:21
Hmm... elle est zarb ta table. Ta clef c'est l'id ou la valeur ?
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.
Marsh Posté le 18-08-2008 à 14:55:52
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.
Marsh Posté le 18-08-2008 à 16:23:39
Essayer la requête suivante (je l'ai testée sous Oracle).
Delete from table t1 |
Marsh Posté le 18-08-2008 à 17:31:25
ç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?
Marsh Posté le 18-08-2008 à 18:00:37
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.
Marsh Posté le 18-08-2008 à 14:15:05
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