gpt4 book ai didi

mysql - 在 MySQL 表中插入缺失值

转载 作者:可可西里 更新时间:2023-11-01 07:31:27 27 4
gpt4 key购买 nike

我将一些日内股票数据保存到 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

当然这个查询是行不通的,但它应该是这样的。

对于如何在没有游标和临时表的情况下解决这个问题的任何想法,我将不胜感激。

最佳答案

这应该有效:

SET @prev = NULL;

UPDATE ticks
SET quote= @prev := coalesce(quote, @prev)
ORDER BY tick;

顺便说一句,同样的技巧也适用于阅读:

SELECT   t.tick, @prev := coalesce(t.quote, @prev)
FROM ticks t
JOIN (SELECT @prev:=NULL) as x -- initializes @prev
ORDER BY tick

关于mysql - 在 MySQL 表中插入缺失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7299400/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com