我正在寻找一种方法,如何根据创建日期获取表格重复条目的排名。较旧的日期将是获得等级1的人,依此类推下一个副本。它应该是这样的:
id number create_date rank
1 1 02/03 1
2 1 02/04 2
3 3 02/03 1
4 4 02/03 1
5 4 02/04 2
6 4 02/05 3
我试着搜索这个但是我不能很好地理解它们是如何实现的,或者更多的是它不是我希望的那样。希望有人能帮助我。
答案 0 :(得分:1)
select
t.*,
@rank := if(@prevDate = create_date, @rank, @rank + 1) as rank,
@prevDate := create_date
from
your_table t
, (select @rank := 0, @prevDate := null) var_init
order by create_date, id
说明:
下面
, (select @rank := 0, @prevDate := null) var_init
变量是初始化的。它和写作一样
set @rank = 0;
set @prevDate = null;
select ... /*without the crossjoin*/;
然后select子句中列的顺序很重要。首先我们检查这一行
@rank := if(@prevDate = create_date, @rank, @rank + 1) as rank,
如果当前行与上一行具有相同的日期。 @prevDate保存前一行的值。如果是,则@rank
变量保持不变,否则它会递增。
在下一行
@prevDate := create_date
我们将@prevDate
变量设置为当前行的值。这就是select
子句中列的顺序很重要的原因。
最后,由于我们正在检查前一行,如果日期不同,order by
子句很重要。