连续x天的帐户余额超过1000

时间:2019-06-30 13:31:05

标签: sql sql-server database

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

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

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

  • 如果某天中的某天不超过1000美元,则需要再次重新计算

  • 无需担心性能问题。只需要一个关于如何设计另一个表来保存该值的一般思路,并可能需要一个触发器来解决此问题。

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

1 个答案:

答案 0 :(得分:0)

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