首先,我有一个具有以下字段的交易数据库。要求是,如果用户连续超过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-在此处标记并重置上一个超过日期的日期
答案 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