All Forums Database
detached 2 posts Joined 02/13
16 Mar 2015
Ordered Analytical Function/Iterative Loop

Hi All,

 

I have the data in the below format. I need to fill the blanks in the column lifecycle_stage, with the condition

 

a. if all the preceding values in the column is null, it should substitute the first following non null value

b. if preceding cells have a value, then it should substitute the first preceding non null value

c. if all following cells are null then, it should substitute the first preceding non null value

d. if following cells have value, then it should substitute the first following non null value

 

Every ID is repeated 39 times, that is for 3 quarters.

 

 

 

 

party_id            FISC_WEEK_VAL    lifecycle_stage    intended_result

1702829476     2015-W01                                      sales_nurturing

1702829476     2015-W02                                      sales_nurturing

1702829476     2015-W03                                      sales_nurturing

1702829476     2015-W04                                      sales_nurturing 

1702829476     2015-W05                                      sales_nurturing 

1702829476     2015-W06                                      sales_nurturing

1702829476     2015-W07                                      sales_nurturing 

1702829476     2015-W08                                      sales_nurturing 

1702829476     2015-W09                                      sales_nurturing  

1702829476     2015-W10                                      sales_nurturing 

1702829476     2015-W11                                      sales_nurturing 

1702829476     2015-W12                                      sales_nurturing

1702829476     2015-W13                                      sales_nurturing 

1702829476     2015-W14                                      sales_nurturing 

1702829476     2015-W15                                      sales_nurturing  

1702829476     2015-W16                                      sales_nurturing 

1702829476     2015-W17                                      sales_nurturing 

1702829476     2015-W18                                      sales_nurturing 

1702829476     2015-W19                                      sales_nurturing

1702829476     2015-W20                                      sales_nurturing 

1702829476     2015-W21       sales_nurturing       sales_nurturing    

1702829476     2015-W22                                      sales_nurturing

1702829476     2015-W23                                      sales_nurturing

1702829476     2015-W24                                      sales_nurturing 

1702829476     2015-W25                                      sales_nurturing 

1702829476     2015-W26                                      sales_nurturing 

1702829476     2015-W27                                      sales_nurturing  

1702829476     2015-W28                                      sales_nurturing 

1702829476     2015-W29                                      sales_nurturing 

1702829476     2015-W30                                      sales_nurturing  

1702829476     2015-W31            awareness          awareness

1702829476     2015-W32                                      awareness 

1702829476     2015-W33                                      awareness 

1702829476     2015-W34            awareness          awareness 

1702829476     2015-W34            opportunity         opportunity  

1702829476     2015-W34            customer            customer

1702829476     2015-W35                                      customer

1702829476     2015-W36                                      customer

1702829476     2015-W37                                      customer

1702829476     2015-W38                                      customer

1702829476     2015-W39                                      customer

 

dnoeth 4628 posts Joined 11/04
16 Mar 2015

What's your TD release?
In TD14 you could use FIRST_VALUE/LAST_VALUE:

SELECT party_id,  fisc_week_val, lifecycle_stage,
   COALESCE(LAST_VALUE(lifecycle_stage IGNORE NULLS)
            OVER (ORDER BY fisc_week_val
                  ROWS UNBOUNDED PRECEDING),
            FIRST_VALUE(lifecycle_stage IGNORE NULLS)
            OVER (ORDER BY fisc_week_val
                  ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
           )
FROM tab

 
Before this should work, too:

SELECT party_id, fisc_week_val, lifecycle_stage,
   MAX(lifecycle_stage) 
   OVER (PARTITION BY CASE WHEN grp = 0 THEN 1 ELSE grp end)
FROM 
 (
   SELECT party_id, fisc_week_val, lifecycle_stage,
      SUM(CASE WHEN lifecycle_stage IS NULL THEN 0 ELSE 1 END) 
      OVER(ORDER BY fisc_week_val 
           ROWS  UNBOUNDED PRECEDING ) AS grp
   FROM tab
 ) AS dt

Dieter

You must sign in to leave a comment.