Суммирование последовательности сумм, итеративно сгруппированных по идентификатору и дате в Presto

Я пытаюсь запустить запрос в Amazon Athena, где я суммирую последовательность транзакций по идентификатору до определенной даты. Указанная дата дает баланс на данный момент времени. Для каждого идентификатора мне нужно включить самую первую транзакцию, чтобы получить правильный баланс. Данные структурированы как

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

Вышеупомянутый запрос дает мне остатки на 30 сентября. Однако как это достигается для нескольких точек за раз в одном запросе, например, для последнего дня месяца за последние 12 месяцев? Я знаю, что вы можете использовать временные таблицы и т. Д., Но я не очень знаком с этим.

Заранее спасибо.


person Artem    schedule 27.09.2018    source источник


Ответы (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

Надеюсь, это поможет.

person Tanveer Uddin    schedule 27.09.2018
comment
Что ж, это было просто. Спасибо - person Artem; 27.09.2018