在 Presto 中对按 ID 和按日期迭代分组的一系列金额求和
Summing a sequence of amounts iteratively grouped by ID and by date in 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 个月的最后一天?我知道你可以使用临时表等,但我不太熟悉这个。
提前致谢。
您需要创建一个 window 函数,如下所示。
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
查询 returns 输出如下:
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
希望对您有所帮助。
我正在尝试 运行 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 个月的最后一天?我知道你可以使用临时表等,但我不太熟悉这个。
提前致谢。
您需要创建一个 window 函数,如下所示。
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
查询 returns 输出如下:
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
希望对您有所帮助。