Mysql在分组结果中的排名

Mysql在分组结果中的排名,mysql,Mysql,我读过一些帖子,这些帖子回答了如何在mysql中对结果进行排名,但我的问题是如何在一个组中分配排名 让我举例说明 数据: 通过以下查询,我能够实现以下目标: SELECT @ss := @ss + 1 AS rank, res.sm_id, res.result_month FROM (SELECT sm_id, result_month FROM xx_table GROUP BY sm_id,

我读过一些帖子,这些帖子回答了如何在mysql中对结果进行排名,但我的问题是如何在一个组中分配排名

让我举例说明

数据:

通过以下查询,我能够实现以下目标:

SELECT @ss := @ss + 1 AS rank, 
       res.sm_id, 
       res.result_month 
FROM   (SELECT sm_id, result_month 
        FROM   xx_table
        GROUP  BY sm_id, 
                  result_month) AS res,(SELECT @ss := 0) AS ss; 
目前的结果:

  rank | sem_id | result_month 
  ----------------------------
  1   | 1   |1313907325000
  2   | 1   |1345529725000
  3   | 2   |1329804925000
  4   | 2   |1361427325000
  5   | 3   |1377065725000
  6   | 3   |1440137725000
我真正想要的是:

  rank | sem_id | result_month 
  ----------------------------
  1   | 1   |1345529725000
  2   | 1   |1313907325000
  1   | 2   |1361427325000
  2   | 2   |1329804925000
  1   | 3   |1440137725000
  2   | 3   |1377065725000
在上述结果中,要观察的事物是每个组在其自身中进行排序并且每个组按结果月描述排序

请帮助我如何实现上述结果


提前谢谢

就快到了,使用另一个变量来计算组:

SELECT @ss := CASE WHEN @grp = sem_id THEN @ss + 1 ELSE 1 END AS rank, sem_id, result_month, @grp := sem_id
FROM   (select * from xx_table ORDER  BY sem_id, result_month DESC) m
CROSS JOIN (SELECT @ss := 0, @grp = null) ss 

请看这里。

排名是从哪里来的?哦,对不起,我的错,我用正确的queryGreat更新了问题!!谢谢@Forward
SELECT @ss := CASE WHEN @grp = sem_id THEN @ss + 1 ELSE 1 END AS rank, sem_id, result_month, @grp := sem_id
FROM   (select * from xx_table ORDER  BY sem_id, result_month DESC) m
CROSS JOIN (SELECT @ss := 0, @grp = null) ss