首页 > 解决方案 > 连续x天账户余额超过1000

问题描述

首先,我有一个具有以下字段的事务数据库。要求是如果用户连续持有 1000 美元余额超过 30 天,则提醒用户的管理员。

TransactionID
TransactionType - 存款、取款、转账
TransactionFromUserID
TransactionToUserID
TransactionValueUsd
TransactionDateTime

注意:
- 目前我只有这个表,没有另一个表来更新余额。余额是即时计算的。

eg:
2019-01-01: 存款 500 美元
2019-02-01: 存款 2000 美元 - 余额 2500 美元, 从这里开始计数
2019-02-10: 取款 2500 美元 - 余额 500, 重置日期
2019-02-15:存款 2000 美元 - 余额 2500 - 在此处再次开始超过日期
2019-04-15:提取 1000 美元 - 余额 1500 - 在此处标记并重置上次超过日期

标签: sqlsql-serverdatabase

解决方案


你的问题不是 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

推荐阅读