我已經保存到MySQL表看起來像這樣一些盤中個股數據:在MySQL表中插入丟失的值
+----------+-------+
| tick | quote |
+----------+-------+
| 08:00:10 | 5778 |
| 08:00:11 | 5776 |
| 08:00:12 | 5778 |
| 08:00:13 | 5778 |
| 08:00:14 | NULL |
| 08:00:15 | NULL |
| 08:00:16 | 5779 |
| 08:00:17 | 5778 |
| 08:00:18 | 5780 |
| 08:00:19 | NULL |
| 08:00:20 | 5781 |
| 08:00:21 | 5779 |
| 08:00:22 | 5779 |
| 08:00:23 | 5779 |
| 08:00:24 | 5778 |
| 08:00:25 | 5779 |
| 08:00:26 | 5777 |
| 08:00:27 | NULL |
| 08:00:28 | NULL |
| 08:00:29 | 5776 |
+----------+-------+
正如你所看到的,也有一些點沒有數據可用(報價NULL
)。我想要做的是一個簡單的步驟插值。這意味着每個NULL
值應該用最後一個可用值進行更新。我設法做到這一點的唯一方法是使用遊標,由於大量的數據,遊標速度很慢。我基本上尋找這樣的事情:
UPDATE table AS t1
SET quote = (SELECT quote FROM table AS t2
WHERE t2.tick < t1.tick AND
t2.quote IS NOT NULL
ORDER BY t2.tick DESC
LIMIT 1)
WHERE quote IS NULL
當然,這種查詢是行不通的,但是這是應該的樣子。
我希望這是如何能夠在不遊標和臨時表來解決任何想法。
有沒有在這個仔細地看了看,但爲什麼不是查詢工作?如果僅僅是因爲你得到'你無法指定目標表...在FROM子句中更新'的錯誤,那麼[在這裏]的解決方法是(http://www.xaprb.com/blog/2006/ 06/23 /如何選擇從更新目標在MySQL /) –
@馬丁史密斯這裏不是那麼容易。在子查詢中你可以引用主查詢't2.tick
@Kamil - 對啊,我明白了。在類似'row_number'模擬技術的MySQL的更新語句中,是否有任何方式使用用戶變量? –