0

我需要计算不同频率的回报。为此,我希望能够将列中的值滞后k个单位。虽然我找到了不同的具体解决方案,但我无法制作通用的存储过程(很可能是由于我对 mysql 缺乏经验)。我怎样才能最好地做到这一点?

我有一个包含多个列的表,其中包含以下信息的列:

  • ID
  • 日期
  • 价格

最终结果应该是一个包含所有原始列的表,加上一个包含价格滞后值的列。

为了保持程序的通用性,我可以想象该程序会将表名、必要的列名(例如 ID、日期、价格)和滞后数 k作为输入,并将一列附加到表中。

4

1 回答 1

0

您可以使用相关子查询做您想做的事情。这是一个例子:

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 不支持表值函数,因此您将无法将结果表用作实际表。

如果你想把它放在一个通用的存储过程中,你将需要动态 SQL 来构造 SQL 语句,使用你传入的特定表和列。

相反,我建议你简单地学习如何表达你想要的查询。如果您有多个具有相同结构的表,那么您可能需要重新访问您的数据模型。拥有多个相似的表通常是一个实体不恰当地分布在太多表中的示例。

于 2015-07-28T11:18:33.630 回答