货币到期跟踪

时间:2016-08-19 07:25:20

标签: mysql sql database database-design currency

我目前正在处理货币到期跟踪问题(原本不是钱,但我把它作为一个更方便的例子)。

用户可以出于某种神秘的原因从平台赚钱,并用它们来购买东西(产品,礼品等)。

我正在寻找一种算法(SQL查询最佳案例)来查找用户余额的当前余额。

支出和赚钱的事件存储在不同的数据库( MySQL )表中(让我们说user_earneduser_spent)。因此,在正常情况下,我只需计算user_earned的用户总数并减去花费的金额(总共user_spent)。

BUT!如果不使用,赢得的用户资金将在2年后到期。 这意味着,如果用户没有使用他的钱或仅使用其中的一部分,他们将过期。如果用户使用他的钱,则使用最旧的未过期货币记录,因此可以根据用户的利益计算余额(奖金)。

这些是及时发生事件的5个场景,以便更好地了解案例:

Money expiration logic

两个表格(user_earneduser_spent)都有时间戳用于日期跟踪。

2 个答案:

答案 0 :(得分:1)

我在我的一个项目中做了类似的事情。

您似乎需要一个包含列的附加表spends_covering spend_idearhed_idsum

因此,对于每个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

答案 1 :(得分:0)

有两个表可能是值得的 - 一个(或多个)包含所有历史详细信息,一个仅包含每个“用户”的当前余额。请务必使用事务来保持两者同步。