sql >> Base de Datos >  >> RDS >> Mysql

Número de fila para los resultados de la consulta agrupados por una columna

Esto debería ser bastante sencillo.

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

Pedí por fk_id primero para asegurarme de que todas sus claves foráneas se juntan (¿y si no están realmente en la tabla?), luego hice su pedido preferido, es decir, por rcv_date . La consulta busca un cambio en fk_id y, si lo hay, la variable de número de fila se establece en 1 o, de lo contrario, la variable se incrementa. Se maneja en la declaración del caso. Observe que @fk:=fk_id se realiza después de verificar el caso; de lo contrario, afectará el número de fila.

Editar: Acabo de notar su propia solución, que resultó ser la misma que terminé. ¡Prestigio! :)