从另一个表 presto 进行有限时间范围的聚合

Aggregation with limited time range from another table presto

提问人:justnewbie89 提问时间:9/10/2019 最后编辑:justnewbie89 更新时间:9/10/2019 访问量:112

问:

我有一个包含日期、productID、金额、userid 的表。 它看起来像这样

table 1
date       userid   amount  productID
2019-07-01  111       10    43214
2019-07-15  112       20    22551
2019-07-19  113       10    22551
2019-08-19  114       30    22551
2019-08-20  111       20    52212
2019-08-20  115       40    22225
2019-08-20  155       50    55521
2019-08-23  155       50    55521
2019-08-23  155       50    55521

我还有一个表,将用作聚合中的参考。 第二个表包含 productID、start_date end_date。

table 2
product ID  start_date  end_date
22551   2019-07-19  2019-08-20
22225   2019-07-19  2019-08-20
55521   2019-07-19  2019-08-20

所需的结果是根据表 2 中的规则计算表 1 中的 sum(amount)。期望的结果如下所示

result
productID   sum(amount)
22551   40
22225   40
55521   50
MySQL SQL Presto

评论


答:

0赞 Zaynul Abadin Tuhin 9/10/2019 #1

使用聚合

select t1.productid
     , sum(amount) 
  from table1 t1 
  join table2 t2 
    on t1.productid = t2.productid  
   and t1.date >= t2.start_date 
   and t1.date <= t2.end_date
 group 
    by t1.product

评论

0赞 Zaynul Abadin Tuhin 9/10/2019
@RaymondNijland 当我用你投反对票的日期进行编辑时
0赞 Zaynul Abadin Tuhin 9/10/2019
@RaymondNijland对不起,我的猜测
0赞 Raymond Nijland 9/10/2019
没关系。。Annyhow IAM 将删除我的评论,因为您的答案已更改为确实给出正确结果的内容。
1赞 Gordon Linoff 9/10/2019 #2

这看起来像一个 和 :JOINGROUP BY

select t1.productId, sum(t1.amount)
from table1 t1 join
     table2 t2
     on t1.productId = t2.productId and
        t1.date >= t2.start_date and
        t1.date <= t2.end_date
group by t1.productId;