首页 > 解决方案 > 在 mysql 5.7 中替代 rank 函数以找出按 cr-id 分组的最新记录

问题描述

我有一张这样的桌子:

cr-id  prod-name  timestamp 

p1     prod-1     2020-10-06 01:00:00.0
p1     prod-2     2020-10-06 02:00:00.0
p1.    prod-1     2020-07-03 08:32:00.0
p2.    prod-2     2020-06-01 07:39:00.0
p2.    prod-1     2020-04-05 03:32:00.0
p3.    prod-2     2020-03-02 02:23:00.0
p3.    prod-2     2020-07-04 02:23:00.0

我想为按 cr-id 分组的最新日期使用新的列排名。所以我的输出结果应该是这样的:

 cr-id  prod-name  timestamp              rank

p1     prod-1     2020-10-06 01:00:00.0    2
p1     prod-2     2020-10-06 02:00:00.0    1
p1.    prod-1     2020-07-03 08:32:00.0    3
p2.    prod-2     2020-06-01 07:39:00.0    1
p2.    prod-1     2020-04-05 03:32:00.0    2
p3.    prod-2     2020-03-02 02:23:00.0    2
p3.    prod-2     2020-07-04 02:23:00.0    1

我使用的是 mysql-5.7,所以 RANK 功能在这里不起作用。你能帮我以有效的方式实现这一目标吗?

标签: mysqlsqldatabasesubquerywindow-functions

解决方案


一种选择使用相关子查询:

select t.*,
    (
        select 1 + count(*) 
        from mytable t1 
        where t1.cr_id = t.cr_id and t1.timestamp > t.timestamp
    ) rn
from mytable t

推荐阅读