2

それぞれが個別の株式の毎日の株価を含む約 8000 ファイルを 1 つのテーブルに読み込み、2 分間隔ごとに最新の価格を選択し、間隔内で利用可能なレコードがない場合は Null を書き込みます。私のアイデアは、bucketNumber という列を追加して、レコードがどの間隔に該当するかを示し、値 1、2、...、195 の 1 つの列を含む別のテーブルを作成し、8000 回繰り返してから、2 つのテーブルを結合することです。最後に、同じbucketNumberを持つレコードのタイムスタンプが最大のレコードを選択します。

これは仕事をする良い方法ですか?そうである場合、値1、2、...、195の1つの列が8000回繰り返されるテーブルを効率的に生成する方法。

4

2 に答える 2

0

これは、1から8000までの整数値の列を返すクエリです。

SELECT thousands.d*1000 + hundreds.d*100 + tens.d*10 + ones.d + 1 AS num
  FROM ( SELECT 0 AS d UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 
                       UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
                       UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
       ) ones
 CROSS      
  JOIN ( SELECT 0 AS d UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 
                       UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
                       UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
       ) tens
 CROSS
  JOIN ( SELECT 0 AS d UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 
                       UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
                       UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
       ) hundreds
 CROSS
  JOIN ( SELECT 0 AS d UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 
                       UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
                       UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
       ) thousands
HAVING num <= 8000
ORDER BY num
于 2012-12-31T04:12:27.720 に答える
0

ストアド プロシージャが最も簡単な方法のようです。2 分間隔ごとにループし、間隔内で最大の時間を持つレコードから価格を選択するだけです。開始時間と終了時間の引数を含めることができます。これにより、より一般的なソリューションが提供されます。

于 2012-12-31T05:14:31.790 に答える