Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL Group By con i primi N numeri di ogni tipo

SELECT  mo.Letter, md.Rank
FROM    (
        SELECT  DISTINCT letter
        FROM    mytable
        ) mo
JOIN    mytable md
ON      md.Letter >= mo.Letter
        AND md.Letter <= mo.Letter
        AND Rank <=
        COALESCE
                (
                (
                SELECT  Rank
                FROM    mytable mi
                WHERE   mi.letter = mo.letter
                ORDER BY
                        Rank
                LIMIT 1, 1
                ),
                0xFFFFFFFF
                )

Devi avere un indice composito su (Letter, Rank) (in quest'ordine)

Nota questo costrutto:

md.Letter >= mo.Letter
AND md.Letter <= mo.Letter

invece del semplice md.Letter = mo.Letter

Forza il Range checked for each record che è più efficiente.

Vedi questo articolo nel mio blog:

per maggiori dettagli su questo.