1

問題の説明:クエリから生成された行のセットごとに、行のセットを受け取り、行のセットを返すpl/pythonアグリゲーターを定義しようとしています。行の入力セットは、クエリのgroupbyステートメントで生成されたグループである必要があります。構文を調べようとしていますが、苦労しています。pl / pgsql関数は大歓迎ですが、これを行うための表現力が不足している可能性があります。

コンテキストの説明:ティッカーシンボル、日付、値の3つの列を持つテーブルがあります。私が持っている値に従って、各ティッカーシンボルと日付のMACDを計算しようとしています。テーブルを日付でグループ化して並べ替えることができます。グループごとに、各ティッカーの現在の値とアグリゲーターの以前の値に従って、その日付のアグリゲーターの値を計算するだけです。 SDに格納される場合、返される必要があるのは、その値を持つ行のセットと、場合によっては結合を行うためのティッカーだけですが、順序を維持し、結合の時間を節約できるはずです。

これは、テーブルが作成される方法です。

create table candles(ticker text, day date, value real,
  primary key (ticker, day));

ここでは、Java(疑似コードっぽい)の例を見つけることができます。これは、ティッカーでソートされた後、グループ(日ごとのグループ)がどのように処理されるかを示しています。Javaでは、これらのグループはArrayListとして表されます。これは、ティッカーで並べ替えられているため、同じ位置が同じティッカーに対応し(データベースは生成時にチェックされるため、レコードが欠落していない)、日ごとにグループ化されているため、すべてのグループに次の値があります。前の電話と同じ日と翌日。

PD:pl / pgsqlでMACDを計算するコードも追加しましたが、このためにティッカーと日で並べ替えます。日ごとに並べ替えて、ループ内のすべてのティッカーのすべての計算を実行します。特に最終出力をこのように消費するために日ごとに注文する必要があることを考慮すると、より効率的です。

完全に明確でないことがあれば、私に聞いてください。私は明確で簡潔にしようとしています。

どうもありがとうございます。

4

2 に答える 2

1

説明がわかりにくかったらすいません。私が直面していた問題を解決しました:

  1. サブクエリを使用してグループ化したい値から配列を作成します。select array_agg(x) from y group by z order by v;
  2. []パラメータの説明に追加するだけで、配列を受け入れる関数を作成します。そして、その機能のアグリゲーター。
  3. 最終クエリでアグリゲータとサブクエリを使用します。

かなり簡単でしたが、配列の型とそのすべての可能性について知りませんでした。申し訳ありませんが、ありがとうございます。

于 2012-03-02T13:44:53.080 に答える