我读过回答如何在mysql中对结果排序的帖子,但我的问题是如何在组内分配等级。
让我举个例子来解释
数据:
sem_id | result_month
--------------------
1 |1313907325000
1 |1345529725000
2 |1329804925000
2 |1361427325000
3 |1377065725000
3 |1440137725000通过以下查询,我能够实现什么:
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在上面的结果中,要观察到的是,每一组在内部排列,和,每组由result_month desc排序。
帮助我如何取得上述成果?
提前感谢!
发布于 2017-06-30 03:16:43
就快到了,使用另一个变量计算组:
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 这里见demo。
https://stackoverflow.com/questions/44838004
复制相似问题