0
votes

Mysql obtenir premier et dernier résultat de la requête

Je crée des enregistrements de document dans une base de données et chaque document peut avoir plusieurs versions. Chaque nouvelle version est un nouvel enregistrement dans la base de données. Pour regrouper les versions de document ensemble, je leur attribue un identifiant unique partagé groupid code>.

Ce que j'essaie de chercher à partir de la base de données est la dernière version du document, mais je souhaite également que le document original créé à la date de la date: p> xxx pré>

Exemple d'enregistrement: P>

SELECT * FROM documents 
WHERE group_id='xyz'
ORDER BY 'created_at' DESC
LIMIT 1


3 commentaires

Votre Documents et Les versions doivent être dans des tables séparées, avec une clé étrangère dans la table Table de la table pointant sur l'ID de document.


@Zack Do Earlaborer pourquoi "devrait" être?


Pas un ordinateur en ce moment, je ne peux donc pas saisir une réponse complète. Mais vos données doivent être correctement normalisées.


5 Réponses :


4
votes

Vous pouvez utiliser des sous-requêtes:

SELECT * FROM documents 
WHERE id in (
    select min(id) FROM documents WHERE group_id='xyz'
    union
    select max(id) FROM documents WHERE group_id='xyz'
)


0 commentaires

0
votes

Ajout d'une sous-requête à la requête L'original Created_AT pourrait fonctionner: xxx

puisque la date créée_at pour le document original ne change pas, je pourrais suggérer de dés-normaliser ces données et d'ajouter un nouveau colonne original_created_at est rempli pour toutes les nouvelles lignes.


0 commentaires

0
votes

Sélectionnez min (créé_at) comme date_created, max (créé_at) comme date_updated, group_id à partir de documents où group_id = 'xyz' groupe par groupe_id


0 commentaires

0
votes

Si cela est pour un seul groupe, j'irais:

select lastd.*,
       (select min(d2.created_at)
        from documents d2
        where d2.group_id = d.group_id
       ) as first_created_at
from (select d.*
      from documents d
      where group_id = 'xyz'
      order by created_at desc
      limit 1
     ) lastd;


0 commentaires

0
votes

Cette requête: xxx

donne toutes les lignes contenant le min et max créé_at pour chaque group_id . de
Vous pouvez ajouter n'importe quelle condition dont vous avez besoin comme suit: xxx


0 commentaires