1

如您所见,我在此链接SQLFiddle上创建了表。有名称带有点和执行日期。我想每天补充一下这些人在那天是如何完成的。它应该每天从 1 开始(您可以在“排名”中看到它)。结果应该如下所示:

Result
      ID |    date     | Rank | Name
      ---------------------------------
      1  | 2013-10-01  | 1    | Tom
      2  | 2013-10-01  | 2    | Karen
      3  | 2013-10-01  | 3    | Lucy
      4  | 2013-10-02  | 1    | Karen
      5  | 2013-10-02  | 2    | Tom
      6  | 2013-10-02  | 3    | Lucy
      7  | 2013-10-03  | 1    | Tom
      8  | 2013-10-03  | 2    | Lucy
      9  | 2013-10-03  | 3    | Karen
      10 | 2013-10-04  | 1    | Tom
      11 | 2013-10-04  | 2    | Lucy
      12 | 2013-10-04  | 3    | Karen
4

1 回答 1

3

MySQL 没有 row_number() 函数,但你可以用变量伪造它。

select
    t.id,
    t.datum,
    t.rank,
    t.name
from ( 
    select
        s.id,
        s.datum,
        s.name,
        s.points,
        If(@datum <> s.datum, @rank := 1, @rank := @rank + 1) as rank, 
        @datum := s.datum
    from
        score_table s
            cross join (
            select
                @rank := null,
                @datum := '1980-01-01'
        ) as r 
    order by
        s.datum,
        s.points desc
    ) as t
order by 
    t.id,
    t.rank;

Example SQLFiddle

于 2013-11-13T00:29:21.623 回答