0
我目前正在嘗試處理大塊模擬數據(〜2Gb值)。該數據是在它看起來像一個表:在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 |
| : | : | : | : |
+-------+--------+----------+-------+
所以對於每次運行(由run_id標識)有許多與相應的數據的時間步長(在run_id 1的情況下,有9543個時間步)。
杜林模擬運行,有發生的事件。這些事件的時間步驟都記錄在另一個表:那麼對於這組數據,與run_id 1
Table: Simulation Events
+-------+--------+----------+
| id | run_id | timestep |
+-------+--------+----------+
| 1 | 1 | 152 |
| 2 | 1 | 193 |
| 3 | 1 | 382 |
| : | : | : |
| 143 | 1 | 9382 |
| 144 | 2 | 137 |
| : | : | : |
+-------+--------+----------+
,有時間步152,193,382,...事件9382. run_id 2有了第一位事件在時間步驟137等。我對每個run_id之前的3次步驟,每個事件的時間步長和3次步驟發生的事情感興趣。我想放在一起返回的東西,看起來像一個查詢:
+--------+----------------+----------+-------+
| 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 |
+--------+----------------+----------+-------+
其中第一行,用delta_ts = -3是從時間步長149價值,-2是從時間步長150,-1從時間步驟151等任何想法在一起查詢會做到這一點?
@ Blindy-當您在存儲過程中提到使用遊標時。你的意思是沿着從事件表run_id = x選擇時間步的方法,並迭代這些值,從模擬數據表中選擇範圍?還是你有其他想法? – MarkD
一旦你有了你的遊標,你就可以爲每一步運行額外的查詢,或者只是將一些變量(或臨時表)中的前一行(幾行)存儲起來,並在現場進行聚合。我真的認爲你不應該走這條路線! – Blindy
我同意 - 聽起來很慢。雖然我一直在試圖弄清楚如何爲第一個例子做這些連接,並且我無處可去。我會讀空白的連接,看看我想出了什麼。感謝您的建議! – MarkD