【发布时间】:2021-10-06 09:41:35
【问题描述】:
注意:我在这篇文章中使用的是 Y-m-d 日期格式。
所以我有一个包含三个表的数据库:
投资者、投资、daily_stats
我已经在这个 db-fiddle 上设置了它们:https://www.db-fiddle.com/f/m1DFJKzMs8SuYeVAUYcHU9/6
investors 基本上是我的“用户”表。它包含投资者的详细信息,例如电子邮件、姓名等。
在投资表中,我存储了每个投资者投资的数据。 start_date 是投资开始的时间,end_date 是结束的时间,amount 是投资的金额,percent 是投资者从其投资中获得的利润份额。 (其余作为费用收取)。
在我的 daily_stats 表中,我有每天活跃的所有投资总和的每日总利润。
现在,棘手的部分是为每个投资者生成一个数据集,该数据集向他们显示他们从所提供的数据中个人投资所获得的每日利润。例如:
| date | profit |
|---|---|
| 2021-01-01 | $3 |
| 2021-01-02 | $7 |
| 2021-01-03 | $1 |
| 2021-01-04 | $5 |
| 2021-01-05 | $9 |
为此,我的查询需要计算投资者在每个每日统计数据中的总投资份额,并将他们的投资百分比应用于利润。例如,如果您查看 Mike 的投资,您会发现它与属于 John 的另外两个投资相交。我们可以像这样可视化它:
因此,每个投资者在总投资中所占的份额会根据投资的数量和规模而变化。再来看看单个日期:2021-02-03
在 daily_stats 中,该日期的利润为 339 美元
当天的总投资为 25000 美元
John 的份额为 5000 美元 (20%),他的获利百分比为 20。
Mike 的份额为 20000 美元 (80%),他的获利百分比为 40。
因此,迈克以 339 * 0.8 * 0.4 = 108.48 回家
约翰需要 339 * 0.2 * 0.2 = 13.56
现在我想我可以为我想要选择统计数据的时间段设置一个 generate_series 并加入投资/每日统计表,但我不知道如何设置它以使投资者的利润成为每天计算,如图所示
【问题讨论】:
-
我在下面的答案中提到了这一点,但 25000 美元中的 5000 美元是 20%。 25000 美元中的 20000 美元是 80%。所以你的预期结果可能需要更正。
-
另外,在 2021-02-03,每日利润是 339 美元,而不是 399 美元。因此,这也会导致您的预期结果有所不同。您最初写了 339 美元,但您的计算包含错误(399 美元)。
标签: php sql postgresql math time-series