根据条件在sql中创建新列?

Mohekar:
   PARENT_ID    ID   YR_MONTH    REWARD
1    1          11   201601        3
2    1          12   201605        9
3    1          13   201609        12
4    2          21   201601        6
5    2          22   201605        9
6    2          23   201609        9
7    3          31   201601        15
8    3          32   201605        9
9    3          33   201609        12
10   3          34   201610        9

我需要创建一个基于奖励列的新列。奖励为9的情况下,条件为1否则为0。

条件将是:

  1. 对于特定的parent_id,id检查是否有比上一个yr_month高的奖励,如果是,则为0,否则为0,否则为1

  2. 只有前9个被标记为1,否则为0

预期成绩:

   PARENT_ID    ID   YR_MONTH    REWARD  REWARD_STATUS
1    1          11   201601        3          0
2    1          12   201605        9          1
3    1          13   201609        12         0
4    2          21   201601        6          0
5    2          22   201605        9          1
6    2          23   201609        9          0
7    3          31   201601        15         0
8    3          32   201605        9          0
9    3          33   201609        12         0
10   3          34   201610        9          0
专线小巴:

我将使用窗口函数:

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,其reward等于或大于9

如果您正在运行MySQL,则case表达式可以简化为:

(
    reward = 9 
    and sum(reward >= 9)  over(partition by parent_id order by yr_month)
) reward_status

DB Fiddle上的演示

PARENT_ID | ID | YR_MONTH | 奖励| 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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章