2011-08-09 11 views
0

私は現在、大量のシミュレーションデータ(〜2Gb相当)を処理しようとしています。データがどのように見えるテーブルである:RUN_ID 1の場合((RUN_IDによって識別される)各ラン対応するデータとの時間ステップの数があるためそうMySQLでは、別のテーブルの場所からデータの範囲を選択するクエリを作成するにはどうすればよいですか?

Table: Simulation Data 
+-------+--------+----------+-------+ 
| id | run_id | timestep | value | 
+-------+--------+----------+-------+ 
|  1 | 1 |  1 | 0.00 | 
|  2 | 1 |  2 | 0.003 | 
|  : | : |  : | : | 
| 9543 | 1 | 9543 | 0.23 | 
| 9544 | 2 |  1 | 0.00 | 
|  : | : |  : | : | 
+-------+--------+----------+-------+ 

、9543時間ステップがありました)。

シミュレーションの実行中に発生するイベントがあります。これらのイベントの時間ステップは、別のテーブルに記録されています

Table: Simulation Events 
+-------+--------+----------+ 
| id | run_id | timestep | 
+-------+--------+----------+ 
| 1 | 1 | 152  | 
| 2 | 1 | 193  | 
| 3 | 1 | 382  | 
| : | : | :  | 
| 143 | 1 | 9382 | 
| 144 | 2 | 137  | 
| : | : | :  | 
+-------+--------+----------+ 

だからこのデータセットに対して、RUN_ID 1で、時間ステップ152でのイベント、193、382は、ありました... 9382. RUN_ID 2は、その最初のを持っています時間ステップ137でのイベントなどがあります。私は、前の3タイムステップ、時間ステップ、および各イベント後の3タイムステップで、それぞれのrun_idについて何が起こるかに興味があります。 、

delta_ts =で最初の行は、-3 -2、タイムステップ149からの値になりタイムステップ150からなり
+--------+----------------+----------+-------+ 
| run_id | event_timestep | delta_ts | value | 
+--------+----------------+----------+-------+ 
| 1 |  152  | -3  | 0.053 | 
| 1 |  152  | -2  | 0.042 | 
| 1 |  152  | -1  | 0.031 | 
| 1 |  152  | 0  | 0.003 | 
| 1 |  152  | 1  | 0.532 | 
| 1 |  152  | 2  | 0.736 | 
| 1 |  152  | 3  | 1.138 | 
| 1 |  193  | -3  | 0.049 | 
| : |  :  | :  | : | 
| 1 |  9382  | -3  | 0.068 | 
| : |  :  | :  | : | 
| 1 |  9382  | 3  | 1.523 | 
+--------+----------------+----------+-------+ 

-1:私は一緒にのように見える何かを返すクエリを入れたいですtimestep 151などから、これを行うクエリをまとめることについてのあらゆる考えがありますか?

答えて

1

この上のビューの異なる2つのポイントをあります:

    あなたは空白を使用することができます
  • は、(デカルト積)select ... from table t1, table t2 where ...参加していますが、2行をリンク状態を把握する必要が場合にのみ彼ら」 "関連する"。また、ペアはあなたの例では可換であることに注意してください。したがって、t1.id<t2.idのような条件を追加すると、自己結合も除外されます。
  • ストアドプロシージャ内でカーソルを使用し、以前のnステップの値を格納し、手動で相関させることができます。これは遅く、より多くのメモリを使用しますが、書きやすくなります。
+0

@ Blindy-ストアドプロシージャでカーソルを使用すると言います。 run_id = xのイベントテーブルからタイムステップを選択する行に沿って何かを意味し、それらの値を繰り返し、シミュレーションデータテーブルから範囲を選択しますか?または、あなたは何か他のことを覚えていましたか? – MarkD

+0

カーソルを作成したら、各ステップごとに追加のクエリを実行するか、以前の(少数の)行を変数セット(または一時テーブル)に格納してその場で集計することができます。私は本当にあなたがこのルートに行くべきではないと思う! – Blindy

+0

私はそれが遅く聞こえることに同意します。私は最初の例でこれらの結合を行う方法を理解しようとしていましたが、どこにもいません。私は空白の結合について読んで、私が思いつくものを見ていきます。提案していただきありがとうございます! – MarkD

関連する問題