滞后于 table 列的通用存储过程
Generic stored procedure to lag a table column
我需要计算不同频率下的 returns。为此,我希望能够将列中的值滞后 k 个单位。虽然我找到了不同的特定解决方案,但我无法制作通用存储过程(很可能是因为我对 mysql 缺乏经验)。我怎样才能最好地做到这一点?
我有一个包含多个列的 table,其中包含以下信息的列:
- ID
- 日期
- 价格
最终结果应该是 table 包含所有原始列,加上 包含价格滞后值的列。
为了保持程序的通用性,我可以想象程序会采用 table 名称、必要的列名(例如 ID、日期、价格)和滞后数 k 作为输入,并将一列附加到 table.
您可以使用相关子查询做您想做的事。这是一个例子:
select t.*,
(select t2.price
from <tablename> t2
where t2.date < t.date
order by date
limit 1 offset 1 -- change the offset for a bigger lag
) as price_lag_1
from <tablename> t;
您不太希望创建通用存储过程 SQL-y。 MySQL 不支持 table 值函数,因此您无法将结果 table 用作实际 table。
如果你想把它放在一个通用的存储过程中,你将需要动态 SQL 来构造 SQL 语句,使用特定的 table 和列传入.
相反,我建议您只学习如何将您想要的内容表达为查询。如果您有多个具有相同结构的 table,那么您可能需要重新访问您的数据模型。有多个相似的 tables 通常是一个实体不恰当地分布在太多 tables 中的一个例子。
我需要计算不同频率下的 returns。为此,我希望能够将列中的值滞后 k 个单位。虽然我找到了不同的特定解决方案,但我无法制作通用存储过程(很可能是因为我对 mysql 缺乏经验)。我怎样才能最好地做到这一点?
我有一个包含多个列的 table,其中包含以下信息的列:
- ID
- 日期
- 价格
最终结果应该是 table 包含所有原始列,加上 包含价格滞后值的列。
为了保持程序的通用性,我可以想象程序会采用 table 名称、必要的列名(例如 ID、日期、价格)和滞后数 k 作为输入,并将一列附加到 table.
您可以使用相关子查询做您想做的事。这是一个例子:
select t.*,
(select t2.price
from <tablename> t2
where t2.date < t.date
order by date
limit 1 offset 1 -- change the offset for a bigger lag
) as price_lag_1
from <tablename> t;
您不太希望创建通用存储过程 SQL-y。 MySQL 不支持 table 值函数,因此您无法将结果 table 用作实际 table。
如果你想把它放在一个通用的存储过程中,你将需要动态 SQL 来构造 SQL 语句,使用特定的 table 和列传入.
相反,我建议您只学习如何将您想要的内容表达为查询。如果您有多个具有相同结构的 table,那么您可能需要重新访问您的数据模型。有多个相似的 tables 通常是一个实体不恰当地分布在太多 tables 中的一个例子。