2010-05-18 6 views
4

Je suis confronté à un petit problème. Je stocke toutes les versions de tous les documents dans une seule table. Chaque document a un identifiant unique, et la version est stockée sous la forme d'un entier qui est incrémenté chaque fois qu'il y a une nouvelle version.Spécifiez la ligne à retourner sur le groupe SQLite Par

J'ai besoin d'une requête qui ne sélectionnera que la dernière version de chaque document de la base de données. Lors de l'utilisation de GROUP BY fonctionne, il semble qu'il va se casser si les versions ne sont pas insérées dans la base de données dans l'ordre de version (c'est-à-dire qu'il prend le ROWID maximum qui ne sera pas toujours la dernière version).

Notez que la dernière version de chaque document sera probablement un nombre différent (c'est-à-dire que le document A est à la version 3 et le document B à la version 6). Je suis à bout de nerfs, est-ce que quelqu'un sait comment faire cela (sélectionner tous les documents, mais ne retourner qu'un seul enregistrement pour chaque document_id, et que l'enregistrement retourné devrait avoir le numéro de version le plus élevé)?

Répondre

6

Vous devez faire une sous-sélection pour trouver la table version max donc quelque chose comme

On suppose que l'on appelle docs

select t.* 
    from docs t 
     inner join (select id, max(version) as ver from docs group by id) as t2 
      where t2.id = t.id and t2.ver = t.version 
Questions connexes