所以,我有这张桌子:

promo_id      transac_id        date
--------      ----------        ----

 656265         213516       05/21/2016
 656265         213520       05/21/2016
 656265         213521       05/21/2016
 656265         213530       05/22/2016
 656265         213540       05/25/2016
 895134         365124       06/01/2016
 895134         365130       06/03/2016
 895134         365135       06/04/2016


如何根据具有相同transac_iddatepromo_id进行排名?
这是我想看到的:

promo_id      transac_id        date        rank
--------      ----------        ----        ----

 656265         213516       05/21/2016       1
 656265         213520       05/21/2016       2
 656265         213521       05/21/2016       3
 656265         213530       05/22/2016       4
 656265         213540       05/25/2016       5
 895134         365124       06/01/2016       1
 895134         365130       06/03/2016       2
 895134         365135       06/04/2016       3

最佳答案

模式:

create table t1
(   id int not null,
    thedate date not null
);
insert t1 (id,thedate) values (1,'2017-01-02'),(2,'2016-01-02'),(3,'2018-01-02');


查询:

SELECT id,thedate,@rn:=@rn+1 as rank
FROM t1
cross join (select @rn:=0) xParams
ORDER BY thedate;

+----+------------+------+
| id | thedate    | rank |
+----+------------+------+
|  2 | 2016-01-02 |    1 |
|  1 | 2017-01-02 |    2 |
|  3 | 2018-01-02 |    3 |
+----+------------+------+


xParams是派生表名称。每个派生表都需要一个名称。 cross join用于初始化变量(@rn)进行排名。

关于mysql - 使用日期进行排名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38237334/

10-15 01:47