Остаток на счете более 1000 в течение x дней подряд - PullRequest
0 голосов
/ 30 июня 2019

Во-первых, у меня есть база данных транзакций со следующим полем. Требуется предупредить администратора пользователя, если пользователь последовательно удерживает баланс 1000 долларов США в течение более 30 дней.

TransactionID
TransactionType - депозит, вывод, перевод
TransactionFromUserID
TransactionToUserID
TransactionValueUsd
TransactionDateTime

Примечание:
- В настоящее время у меня есть только эта таблица, и у меня нет другой таблицы для обновления баланса. Баланс рассчитывается на лету.

  • Если один из дней не превышает 1000 долларов США, его необходимо пересчитать заново

  • Не нужно беспокоиться о проблемах производительности. Просто нужно общее представление о том, как мне создать другую таблицу для хранения значения и, возможно, триггер для решения этой проблемы.

например:
2019-01-01: депозит 500 usd
2019-02-01: депозит 2000 долларов США - остаток 2500 долларов США, отсчет от начала отсюда 2019-02-10: снять 2500 долларов США - остаток 500, дата сброса
2019-02-15: депозит 2000 долларов США - баланс 2500 - дата начала превышения снова здесь
2019-04-15: снять 1000 долларов США - остаток 1500 - отметить здесь и сбросить дату последнего превышения

1 Ответ

0 голосов
/ 30 июня 2019

Ваш вопрос не ясен на 100%, но я думаю, что этот запрос достаточно близок к ответу:

select
  *
from (
  select
    transactiontouserid,
    transactiondatetime,
    sum(case when balance < 1000 then 1 else 0 end) 
    over(
      partition by transactiontouserid 
      order by transactiondatetime
      range between interval '30' day preceding and current row
    ) as disqualify_points
  from (
    select
      transactiontouserid,
      transactiondatetime,
      sum(case when transactiontype = 'deposit' then 1 else -1 end 
          * transactionvalueusd) 
      over(
        partition by transactiontouserid 
        order by transactiondatetime
      ) as balance
    from t -- your table name
  ) x
) y
where disqualify_points = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...