sql - 连续x天账户余额超过1000
问题描述
首先,我有一个具有以下字段的事务数据库。要求是如果用户连续持有 1000 美元余额超过 30 天,则提醒用户的管理员。
TransactionID
TransactionType - 存款、取款、转账
TransactionFromUserID
TransactionToUserID
TransactionValueUsd
TransactionDateTime
注意:
- 目前我只有这个表,没有另一个表来更新余额。余额是即时计算的。
如果某一天不超过 1000 美元,则需要重新计算
无需担心性能问题。只需要一个关于我应该如何设计另一个表来保存值以及可能是解决这个问题的触发器的一般想法。
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 - 在此处标记并重置上次超过日期
解决方案
你的问题不是 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
推荐阅读
- php - 谷歌索引 API 错误的 json 文件
- javascript - 如何监视 npm 库函数(Node.js)?
- tensorflow - 如何在没有 keras 的树莓派 4 上使用 TensorFlow lite?
- javascript - 如何根据它们的作用来解耦函数,而不是它们在 JavaScript 中的作用?
- c# - 将 Prolog 与 C# (Unity) 一起使用
- python - 不同的角色有不同的冷却时间 discord.py
- python - 我在这里需要帮助,如何让游戏继续并重复?
- gps - 使用 WebUSB 读取 GPS 接收器
- python - psycopg2:如何将表结构(ddl)复制到文件以进一步重新创建表
- gcc - GCC 无法输入