MySQL根据其创建日期获得重复值的等级

时间:2014-04-10 09:53:48

标签: mysql

我正在寻找一种方法,如何根据创建日期获取表格重复条目的排名。较旧的日期将是获得等级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

我试着搜索这个但是我不能很好地理解它们是如何实现的,或者更多的是它不是我希望的那样。希望有人能帮助我。

1 个答案:

答案 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子句很重要。