所以,我有这张桌子:
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_id
的date
对promo_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/