0

I have a table with campaign data and need to get a list of 'spend_perc' min and max values while grouping by the client_id AND timing of these campaigns.

sample data being:

camp_id  | client_id | start_date | end_date   |   spend_perc       
    7257 |    35224  | 2017-01-16 | 2017-02-11 | 100.05 
    7284 |    35224  | 2017-01-16 | 2017-02-11 | 101.08 
    7308 |    35224  | 2017-01-16 | 2017-02-11 |  101.3  
    7309 |    35224  | 2017-01-16 | 2017-02-11 |  5.8    
    6643 |    35224  | 2017-02-08 | 2017-02-24 |  79.38  
    6645 |    35224  | 2017-02-08 | 2017-02-24 |  6.84   
    6648 |    35224  | 2017-02-08 | 2017-02-24 |  100.01 
    6649 |    78554  | 2017-02-09 | 2017-02-27 |  2.5    
    6650 |    78554  | 2017-02-09 | 2017-02-27 |  18.5   
    6651 |    78554  | 2017-02-09 | 2017-02-27 |  98.5   

what I'm trying to get is the rows with min and max 'spend_perc' values per each client_id AND within the same campaign timing (identical start/end_date):

camp_id  | client_id | start_date | end_date  |   spend_perc       
    7308 |    35224  | 2017-01-16 | 2017-02-11 |  101.3  
    7309 |    35224  | 2017-01-16 | 2017-02-11 |  5.8    
    6645 |    35224  | 2017-02-08 | 2017-02-24 |  6.84   
    6648 |    35224  | 2017-02-08 | 2017-02-24 |  100.01 
    6649 |    78554  | 2017-02-09 | 2017-02-27 |  2.5    
    6651 |    78554  | 2017-02-09 | 2017-02-27 |  98.5   

2 Answers 2

1

smth like:?

with a as 
(select distinct 
camp_id,client_id,start_date,end_date,max(spend_perc) over (partition by start_date,end_date),min(spend_perc) over (partition by start_date,end_date)
from tn
)
select camp_id,client_id,start_date,end_date,case when spend_perc=max then max when spend_perc = min then min end spend_perc
from a
order by camp_id,client_id,start_date,end_date,spend_perc
Sign up to request clarification or add additional context in comments.

Comments

1

I think you will want to get rid of the camp_id field because that will be meaningless in this case. So you want something like:

 SELECT client_id, start_date, end_date, 
        min(spend_perc) as min_spend_perc, max(spend_perc) as max_spend_perc
   FROM mytable
  GROUP BY client_id, start_date, end_date;

Group by the criteria you want to, and select min and max as columns per unique combination of these values (i.e. per row).

1 Comment

Thanks Chris, I do need the camp_id in the results, though.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.