选择最小值和最大值,同时按第三列

时间:2017-02-09 14:50:20

标签: sql postgresql

我有一张包含广告系列数据的表格,需要根据client_id和这些广告系列的时间进行分组,获取'spend_perc'最小值和最大值列表。

样本数据为:

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   

我想要获得的是每个client_id并且在相同的广告系列时间内具有最小和最大'spend_perc'值的行(相同的开始/结束日期):

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 个答案:

答案 0 :(得分:1)

我认为你会想摆脱camp_id字段,因为在这种情况下这将毫无意义。所以你需要这样的东西:

$fruit_counts=array('apple'=>3, 'banana'=>4, 'orange'=>0);
$fruit_colors=array('apple'=>'red', 'banana'=>'yellow', 'orange'=>'orange', 'plum'=>'purple');

按您想要的标准分组,并选择min和max作为这些值的唯一组合(即每行)的列。

答案 1 :(得分:1)

像是:?

select * from book
WHERE bookid LIKE '%% OR title LIKE '%%' OR author LIKE '%%' OR publisher OR '%%';