В моей базе данных Presto (Афина) у меня есть данные для идентификаторов клиентов, сальдо и дат.Столбец баланса показывает изменения в балансе клиентов на определенную дату.Балансы могут идти вверх и вниз.Данные структурированы следующим образом:
ID | Balance| Created
________________________
260709 399.00 2018-10-02
70791 358.44 2018-08-01
70791 344.10 2018-06-01
260709 936.46 2018-08-01
260709 899.00 2018-07-01
70791 347.26 2018-05-28
70791 344.10 2018-05-28
70791 344.10 2018-05-27
260709 899.00 2018-05-27
378218 4500.00 2018-09-27
378218 0.00 2018-07-27
378218 -450.00 2017-12-27
378218 0.00 2017-12-26
Если я хочу баланс для идентификатора, например, 1 октября, я могу просто использовать запрос:
SELECT *
FROM
(SELECT id,
created,
balance,
row_number()
OVER (partition by id
ORDER BY Created) rn
FROM db.table where created<='2018-10-01'
ORDER BY id, created) d
WHERE d.rn=1
Что если я хочу всесальдо за последние 12 или 24 месяца, где сальдо за определенный месяц определяется как последняя запись сальдо в этом конкретном месяце?Идея состоит в том, чтобы уметь видеть, кто имеет положительное сальдо каждый месяц.
Таким образом, даже если у должника нет записи в данном месяце, запрос должен просто вернуть самый последний остаток, т. Е. Для ID=70791
:
ID | Balance| Created
________________________
70791 358.44 2018-08-01
70791 344.10 2018-07-01
70791 344.10 2018-06-01
70791 347.26 2018-05-28
В приведенном выше случаезапись для 2018-07-01
недоступна в наборе данных для этого конкретного идентификатора, поэтому я просто повторно использую самый последний остаток на эту дату.Я надеюсь, что мой случай имеет смысл.
Заранее спасибо.