How to forward fill the non-NULL values with a specific rule?

33 views Asked by At

I have a table containing three columns: data, code, and factor.

For each “code“, i.e., A or B, I want to fill every five records with the same factor.

Take code A for example, starting from 2021.01.02, I want to fill the next four records with the same factor as the first record, i.e., factor=1.

date       code factor
---------- ---- ------
2022.01.02 A    1     
2022.01.03 B    2     
2022.01.04 A    3     
2022.01.05 B    4     
2022.01.06 A    5     
2022.01.07 B    6     
2022.01.08 A    7     
2022.01.09 B    8     
2022.01.10 A    9     
2022.01.11 B    10    
2022.01.12 A    11    
2022.01.13 B    12    
2022.01.14 A    13    
2022.01.15 B    14    
2022.01.16 A    15    
2022.01.17 B    16    
2022.01.18 A    17    
2022.01.19 B    18    
2022.01.20 A    19    
2022.01.21 B    20    
2022.01.22 A    21    
2022.01.23 B    22    
2022.01.24 A    23    
2022.01.25 B    24    
2022.01.26 A    25    
2022.01.27 B    26    
2022.01.28 A    27    
2022.01.29 B    28    
2022.01.30 A    29    
2022.01.31 B    30  
1

There are 1 answers

0
YaN On

You can use function ffill as follows:

date=2022.01.01+1..50
factor=1..50*1.0
code =take(`A`B,50)
select date,code,factor,ffill(iif(0..(size(date)-1) in (5*(0..(size(date)/5))),factor,NULL)) from table(date,code,factor) context by code

date       code factor ffill
---------- ---- ------ -----
2022.01.02 A    1      1    
2022.01.04 A    3      1    
2022.01.06 A    5      1    
2022.01.08 A    7      1    
2022.01.10 A    9      1    
2022.01.12 A    11     11   
2022.01.14 A    13     11   
2022.01.16 A    15     11   
2022.01.18 A    17     11   
2022.01.20 A    19     11   
2022.01.22 A    21     21   
2022.01.24 A    23     21   
2022.01.26 A    25     21   
2022.01.28 A    27     21   
2022.01.30 A    29     21   
2022.02.01 A    31     31   
2022.02.03 A    33     31   
2022.02.05 A    35     31   
2022.02.07 A    37     31   
2022.02.09 A    39     31   
2022.02.11 A    41     41   
2022.02.13 A    43     41   
2022.02.15 A    45     41   
2022.02.17 A    47     41   
2022.02.19 A    49     41   
2022.01.03 B    2      2    
2022.01.05 B    4      2    
2022.01.07 B    6      2    
2022.01.09 B    8      2    
2022.01.11 B    10     2