PARENT_ID ID YR_MONTH REWARD
1 1 11 201601 3
2 1 11 201605 9
3 1 13 201609 9
4 2 21 201601 6
5 2 21 201605 15
6 2 21 201609 9
7 3 31 201601 8
8 3 31 201605 9
9 3 32 201609 9
10 3 32 201610 9
我需要创建一个基于“奖励”列的新列。 奖励为9的情况下,条件为1,否则为0。
条件为:
对于特定的parent_id,id检查是否有不高于上一个yr_month的奖励(如果是,则为0,否则为1)
只有前9个标记为1,否则标记为0
预期结果:
PARENT_ID ID YR_MONTH REWARD REWARD_STATUS
1 1 11 201601 3 0
2 1 11 201605 9 1
3 1 13 201609 9 1
4 2 21 201601 6 0
5 2 21 201605 15 0
6 2 21 201609 9 0
7 3 31 201601 8 0
8 3 31 201605 9 1
9 3 32 201609 9 1
10 3 32 201610 9 0
答案 0 :(得分:0)
我将使用窗口功能:
IORING_SETUP_SQPOLL
如果满足以下条件,则io_uring
表达式将返回select
t.*,
case
when reward = 9
and sum(case when reward >= 9 then 1 else 0 end) over(partition by parent_id order by yr_month) = 1
then 1 else 0 end reward_status
from mytable t
当前记录的case
为1
,对于reward
等于或大于9
parent_id
,没有“先前”记录
如果您正在运行MySQL,则reward
表达式可以简化为:
9
PARENT_ID | ID | YR_MONTH | REWARD | REWARD_STATUS --------: | -: | -------: | -----: | ------------: 1 | 11 | 201601 | 3 | 0 1 | 12 | 201605 | 9 | 1 1 | 13 | 201609 | 12 | 0 2 | 21 | 201601 | 6 | 0 2 | 22 | 201605 | 9 | 1 2 | 23 | 201609 | 9 | 0 3 | 31 | 201601 | 15 | 0 3 | 32 | 201605 | 9 | 0 3 | 33 | 201609 | 12 | 0 3 | 34 | 201610 | 9 | 0