gpt4 book ai didi

mysql - 每日基金数据表结构

转载 作者:行者123 更新时间:2023-11-29 21:58:23 25 4
gpt4 key购买 nike

我想要存储 20 年或更长时间内约 2000 个基金的每日基金数据。起初,我想我只需创建一个巨大的表格,每个基金一列,每个日期一行。我在尝试创建此表时遇到了麻烦,并且还意识到这样的表将有很多 NULL 值(几乎一半的值将为 NULL)。

是否有更有效的方法来构建表或数据库,以便快速查找和获取特定基金数百(或数千)天内的数据?

我想到的另一种方法是使用三列(日期、基金 ID、基金值(value))。然而,这对我来说似乎并不是最佳选择,因为日期和fund_id都会重复多次。仅针对日期拥有几百万个数据点(而不是几千个)似乎很浪费。

哪个是更好的选择?或者有更好的方法来实现这一点吗?

最佳答案

拥有您提到的三列就可以了。 fund_valuefund_idfund_date 的价格。因此 fund_idfund_date 将是该表的 PK。我不明白您的意思是“仅针对日期有几百万个数据点...”如果您有 20k 基金,则特定日期最多将出现在 20k 行中 - 每个基金一个。这并不是不必要的重复。这对于唯一地识别特定基金在特定日期的值(value)是必要的。如果您将fund_name 添加到表中, 将是不必要的重复。我们假设基金名称不会每天发生变化。每个基金的不变(静态)数据将包含在单独的表中。该表的字段 fund_id 将是对静态表的 FK 引用。

要查询特定日期的资金值(value):

select  fund_date as ValueDate, fund_id, fund_value
from fund_value_history
where fund_date = @aDate
and fund_id = @aFund -- to limit to a particular fund

要显示基金从一天到下一天值(value)增加的日期:

select  h1.fund_date, h2.fund_value as PreviousValue,
h1.fund_value PresentValue
from fund_value_history h1
join fund_value_history h2
on h2.fund_id = h1.fund_id
and h2.fund_date =(
select max( fund_date )
from fund_value_history
where fund_id = h2.fund_id
and fund_date < h2.fund_date )
where h2.fund_value < h1.fund_value
and fund_id = @aFund;

这将是一个相当大的结果集,但您可以修改 WHERE 子句来显示,例如,特定日期的值(value)大于前一天的所有基金,或当天所有基金(或特定基金)的值(value)特定日期和前一天,或任意数量的有趣结果。

然后您可以加入静态表以添加基金名称或任何其他描述性数据。

关于mysql - 每日基金数据表结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32904403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com