我目前正在处理货币到期跟踪问题(最初它不是货币,但我将其用作更方便的示例)。
用户可以出于某种神秘的原因从平台上赚钱,并将其花在购买东西(产品、礼物等)上。
我正在寻找一种算法(SQL 查询最佳案例)来查找用户余额的当前余额。
花钱和赚钱的事件存储在不同的数据库 (MySQL) 表中(比如 user_earned
和 user_spent
)。所以在正常情况下,我会简单地从 user_earned
中计算用户总数并减去花费的钱(user_spent
的总数)。
但是!有一个条件,如果不使用,赚取的用户资金将在 2 年内过期。 这意味着,如果用户没有使用他的钱或只使用了其中的一部分,它们就会过期。如果用户使用他的钱,他们会从最旧的未过期的钱记录中使用,因此可以计算有利于用户的余额(奖金)。
这些是 5 个具有时间事件的场景,以便更好地理解案例:
两个表(user_earned
和 user_spent
)都有用于日期跟踪的时间戳。
最佳答案
我在我的一个项目中做了类似的事情。
看起来您需要一个包含列的附加表 spends_covering
spend_id
, earhed_id
, sum
因此对于每个 spends
记录,您需要在 spends_covering
中插入一行或多行以标记“已用”钱。
如果日期小于 2 年,则余额将只是未使用的总和。
select sum(sub.earned_sum-sub.spent_sum) as balance
from
(select e.sum as earned_sum, sum(sc.sum) as spent_sum
from earned e
left join spends_covering sc on e.earhed_id=sc.earhed_id
where e.date BETWEEN ...
group by e.earhed_id
having earned_sum > spent_sum) sub
关于mysql - 资金过期追踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39033342/