Mysql
 sql >> Base de données >  >> RDS >> Mysql

Numéro de ligne pour les résultats de requête regroupés par une colonne

Cela devrait être assez simple.

SELECT (CASE WHEN @fk <> fk_id THEN @row:=1 ELSE @row:[email protected] + 1 END) AS ordinality, 
       @fk:=fk_id, rcv_date
FROM   (SELECT @row:=0) AS r, 
       (SELECT @fk:=0) AS f, 
       (SELECT fk_id, rcv_date FROM files ORDER BY fk_id, rcv_date) AS t

J'ai commandé par fk_id d'abord pour m'assurer que toutes vos clés étrangères se rejoignent (et si elles ne sont pas vraiment dans la table ?), puis j'ai fait votre ordre préféré, c'est-à-dire par rcv_date . La requête recherche un changement dans fk_id et s'il y en a un, la variable de numéro de ligne est définie sur 1, sinon la variable est incrémentée. Il est géré dans une instruction case. Notez que @fk:=fk_id est fait après la vérification de la casse, sinon cela affectera le numéro de ligne.

Modifier : Je viens de remarquer votre propre solution qui s'est avérée être la même que celle avec laquelle je me suis retrouvé. Gloire! :)