mysql - 在 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 功能在这里不起作用。你能帮我以有效的方式实现这一目标吗?
解决方案
一种选择使用相关子查询:
select t.*,
(
select 1 + count(*)
from mytable t1
where t1.cr_id = t.cr_id and t1.timestamp > t.timestamp
) rn
from mytable t
推荐阅读
- jira - Atlassian 帐户 ID
- python - Assign specific `QPushButton` to specific hardware button
- c - 如何在 C 中将莫尔斯编码为拉丁字母转换器
- javascript - Jquery AJAX 到纯 js
- spring - 无法使用连接到 PostgreSQL 数据库的 Spring Boot 添加和更新值
- dart - 如何在同一设备上为不同的项目使用两个版本的颤振?
- javascript - 如何基于相同的键名在枚举之间映射?
- php - 如何将数据编码为 json?
- python - 在主循环中是否有任何方法可以调试 Python tkinter 应用程序?
- ecmascript-6 - const的绝对意义是什么?