0

さまざまな周波数でリターンを計算する必要があります。そうするために、列の値をk単位遅らせることができるようにしたいと考えています。さまざまな特定の解決策を見つけましたが、一般的なストアド プロシージャを作成することはできませんでした (おそらく mysql の経験が浅いため)。どうすればこれを行うのが最善でしょうか?

複数の列を持つテーブルがあり、その列には次の情報が含まれています。

  • ID
  • 日にち
  • 価格

最終結果は、すべての元の列と、Price の遅延値を含む列を含むテーブルになります

手順を一般的なものにするために、手順がテーブル名、必要な列名 (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 に答える