2013-02-27 4 views
0

J'ai la table (TABLE_NAME) comme ceci: enter image description hereligne complexe supprimer dans sqlite

Je voudrais vérifier si le nombre est supérieur à 5 et si oui, supprimer la ligne avec la valeur d'horodatage le plus bas. Dans cet exemple, il faut supprimer la dernière ligne.

Je voudrais le faire avec une instruction de suppression complexe. Des idées pour y parvenir?

+0

Y at-il une clé unique? – peko

+0

vérifier ma réponse .. – Rajneesh071

Répondre

0
DELETE 
FROM TABLE_NAME 
WHERE TIMESTAMP < (
        SELECT TIMESTAMP 
        FROM (
          SELECT TIMESTAMP 
          FROM TABLE_NAME 
          ORDER BY TIMESTAMP DESC 
         ) LIMIT 1 OFFSET 4); 

Avec cette requête vous:

  • pour l'enregistrement par Horodatage
  • DESC sélectionner le 5ème disque TIMESTAMP (votre minimum des valeurs autorisées) -> min_timestamp
  • vous supprimez tous l'enregistrement avec TIMESTAMP < min_timestamp

Je ne l'ai pas testé mais cela devrait être la requête pour résoudre votre problème.

+1

En SQLite, 'rowid's proviennent de la table d'origine. Utilisez 'LIMIT' à la place. –

+0

Le 'SELECT' externe va retourner le * premier * enregistrement. –

+0

Modifié avec l'instruction LIMIT. Merci pour l'aide pour améliorer ma réponse. – araknoid

0

Voici votre solution

delete from TABLE_NAME where timestamp IN (select min(timestamp) from TABLE_NAME where (SELECT count() FROM TABLE_NAME)>5) 

Il vérifiera si votre nombre de tableRecord est râpe puis 5 min puis supprimez enregistrement d'horodatage.

+0

Avez-vous testé cela? – trojanfoe

+0

yup, ma requête d'origine est query >>>>> delete de todoList où pk IN (select min (pk) de todoList où (SELECT count() FROM todoList)> 5) – Rajneesh071