2013-07-03 4 views
0

J'ai une table avec ces deux colonnessql sélectionner des lignes en fonction de la colonne ayant des valeurs en double, mais les commander nettement

name | position 
_______________ 
bob | 1 
rob | 1 
sam | 1 
tom | 2 
shyam | 2 
ram | 2 
shah | 3 
sara | 3 
shiv | 3 
rogue | 4 
logan | 4 
xavier| 4 

je commander par distincte position mais les doublons ne doivent pas être supprimés, le résultat final doit être comme

name | position 
    _______________ 
    bob | 1 
    tom | 2 
    shah | 3 
    rogue | 4 
    rob | 1 
    shyam | 2 
    sara | 3 
    logan | 4 
    sam | 1 
    ram | 2 
    shiv | 3 
    xavier| 4 

J'ai essayé deux position distincts ainsi que le groupe par position, mais les deux supprimer les doublons, mais je les veux être regroupées sous forme d'ensembles de lignes de telle sorte que la première copie se produit alors les lignes de deuxième Dupli cate se produisent etc. Des suggestions ou de l'aide pour y parvenir?

Répondre

1

Vous devez énumérer les lignes dans chaque valeur de position. Ensuite, vous pouvez l'utiliser pour commander:

select t.name, t.position 
from (select t.*, if(@prev = position, @rn := @rn + 1, 1) as rn, 
      @prev := position 
     from t cross join 
      (select @rn := 0, @prev := -1) 
     order by position 
    ) t 
order by rn 
Questions connexes