Faq/Base/140/fr

Comment limiter le nombre de résultats d'une requête groupée ?
Une requête groupe les données sur les valeurs d'un champ. On souhaite ne conserver que les n premiers enregistrements sélectionnés pour chaque groupe.

La FAQ Comment limiter le nombre de résultats d'une requête ? présente comment limiter le nombre d'enregistrements mais cette technique ne peut s'appliquer ici car il ne s'agit pas de sélectionner les n premiers enregistrements retournés par la requête mais les n premiers enregistrements par groupe.

La requête ci-dessous groupe par mois et limite le nombre d'enregistrements à 3 par groupe :



Nota
 * 1) Ce type de requête doit être écrit en mode SQL (le mode ébauche ne le permet pas). Commencer en mode ébauche pour sélectionner tables et champs, puis passer en mode SQL pour ajouter le reste, est une astuce permettant d'éviter la saisie des noms toujours risque d'erreur.
 * 2) Tout se gère par jointure de la table sur elle-même.
 * 3) * Une jointure sur le mois et les montants inférieurs ou égaux à l'enregistrement courant,
 * 4) * Un groupement calculant le nombre d'enregistrements sélectionnés,
 * 5) * Une sélection sur ce nombre en fonction du nombre désiré par groupe (3 dans l'exemple).


 * Le SQL correspondant :


 * [[Media:FR.FAQ.BASE 140 GroupAndLimit.odb|Télécharger une base exemple]]