汇总Presto中按ID和按日期迭代分组的金额序列

时间:2018-09-27 08:26:37

标签: amazon-athena presto

我正在尝试在Amazon Athena中运行查询,在该查询中我将每个ID的交易序列汇总到特定日期。指定的日期将产生该时间点的余额。对于每个ID,我都需要包括第一笔交易,以便获得正确的余额。数据的结构为

ID   |  Amount  | Created
________________________

378218  -450.00 2018-09-27
378218  4500.00 2018-09-27
260709  899.00  2018-09-27
70791   -719.96 2018-09-27
70791   -65.00  2018-09-19
70791   -3.16   2018-09-07
70791   3.16    2018-09-07
70791   61.84   2018-09-01
70791   -61.84  2018-09-01
70791   -65.00  2018-08-16
70791   -61.84  2018-08-01

获取特定日期的所有ID余额很容易:

SELECT SUM(amount), ID, created 
FROM db.table where created<'2018-10-01'
GROUP BY ID

这将产生以下结果:

 ID   |  Amount  | Created
 ________________________

70791   344.10  2015-09-27
260709  899.00  2018-09-27
378218  0.00    2018-09-27

上面的查询为我提供了9月30日的余额。但是,如何在一个查询中多次获得时间点,例如过去12个月中一个月的最后一天呢?我知道您可以使用临时表等,但是我对此并不十分熟悉。

先谢谢了。

1 个答案:

答案 0 :(得分:1)

您将需要创建一个如下所示的窗口函数。

SELECT id, created,sum(amount) over (partition by id order by created)         
balance_at_date  
FROM "db"."table" 
order by id, created;

我有如下数据

ID,AMOUNT,CREATED
123,100,2018-09-01
123,200,2018-09-15
123,-50,2018-09-18
345,100,2017-01-01
345,50,2018-01-01
345,-200,2018-09-01

,查询返回如下输出:

id  created balance_at_date
123 2018-09-01  100
123 2018-09-15  300
123 2018-09-18  250
345 2017-01-01  100
345 2018-01-01  150
345 2018-09-01  -50

希望有帮助。