mysql - 以最终状态条件排名
问题描述
ID Initial_State End_State Date Rank
12345 B EndState 22/08/2019 08:58 3
12345 EndState2 B 21/08/2019 08:58 3
12345 B EndState2 20/08/2019 08:58 2
12345 EndState B 19/08/2019 08:58 2
12345 B EndState 18/08/2019 08:58 1
12345 A B 17/08/2019 08:58 1
在上表中,我正在尝试创建排名列。应根据国家分配等级。如果遇到任何结束状态,则秩必须更改并加 1。例如,一个 ID 可以有多个状态,但是当遇到结束状态时,其以下的所有转换都应视为秩一。
我正在使用 MYSQL
解决方案
您可以使用窗口函数来做到这一点。您可以将“结束状态”的数量计算到上一行并加 1:
select t.*,
coalesce(sum(case when End_State like 'EndState%' then 1 else 0 end) over
(partition by id
order by date
rows between unbounded preceding and 1 preceding
)
), 0
) + 1 as rank
from t;
推荐阅读
- wordpress - 向 Revolution Slider 添加 Webp 支持
- python - 无法使用 Python 3.8 将 BSTR 指针传递给 COM 对象
- android - 启动模拟器时找不到adb
- c# - 在 IIS 中托管的活动目录 c# 网站
- quartz.net - 使用 Quartz 为每两周在周四和周五运行的任务创建一个 cron express
- python - tensorflow 范围在 Jupyter 实验室中丢失
- spring-boot - 使用基本身份验证和无状态会话的无效会话
- android-studio - 无法安装英特尔 HAXM。尽我所能
- sql - 将列值向左切换
- c# - 从变量中保存位图会给出“无效参数”