我有以下的数据库,从今天的日期回到1997年。(如下所示)
# TIME , OPEN , HIGH , LOW , CLOSE , VOLUME
'2016-09-22 21:00:00', '1.30743', '1.30876', '1.29149', '1.29579', '168985'
'2016-09-20 21:00:00', '1.29869', '1.29969', '1.29828', '1.29873', '764'
'2016-09-19 21:00:00', '1.30275', '1.30648', '1.2947' , '1.29847', '201072'
'2016-09-18 21:00:00', '1.29991', '1.3081' , '1.2996' , '1.30795', '142635'
'2016-09-15 21:00:00', '1.32371', '1.32475', '1.2994' , '1.29958', '256907'
'2016-09-14 21:00:00', '1.32318', '1.32784', '1.31791', '1.32371', '598912'
'2016-09-13 21:00:00', '1.31879', '1.32404', '1.31381', '1.32318', '241908'在仔细检查时,我注意到有缺失的数据点。例如,在上面的片段中,缺少2016-09-21 21:00:00。
2016-09-16 21:00:00和2016-09-17 21:00:00也丢失了,但是我并不担心这些日期,因为它们是周末。
我在考虑对丢失的数据使用平均值。一些数据点缺少3行,这使情况更加复杂。
我想也许
(a + b) / (q+1) = x
a = data point after the missing row
b = data point before the missing row
q = amount of data points missing
x = increment value结果将会是
# TIME , OPEN , HIGH , LOW , CLOSE , VOLUME
'2016-09-22 21:00:00', '1.30743', '1.30876', '1.29149', '1.29579', '168985'
'2016-09-21 21:00:00', '1.30306', '1.30422', '1.29488', '1.29726', '85256'
'2016-09-20 21:00:00', '1.29869', '1.29969', '1.29828', '1.29873', '764'
'2016-09-19 21:00:00', '1.30275', '1.30648', '1.2947' , '1.29847', '201072'
'2016-09-18 21:00:00', '1.29991', '1.3081' , '1.2996' , '1.30795', '142635'
'2016-09-15 21:00:00', '1.32371', '1.32475', '1.2994' , '1.29958', '256907'
'2016-09-14 21:00:00', '1.32318', '1.32784', '1.31791', '1.32371', '598912'
'2016-09-13 21:00:00', '1.31879', '1.32404', '1.31381', '1.32318', '241908'是否有方法可以使用SQL代码查找并将缺少的行添加到数据库中(星期五和星期六除外)?
发布于 2016-10-07 09:31:47
具体操作方法:
WHERE子句添加到toss Sat/Sun.LEFT JOIN,以查看在市场将剩余日期放入临时表时哪些日期是假日期。现在,构建一个从临时表联接两次原始数据的丑陋查询,以便获得这两行、求平均值并生成假数据。H215H116将其放入INSERT.中
为什么不这样做:
坦率地说,我认为这是错误的。现在,您将拥有一个包含一些有效数据和一些估计数据的表。任何用户(包括您自己)都会上当受骗,以为这些都是有效数据。请不要编造这样的“谎言”。
发布于 2016-10-06 22:44:01
我认为在查询中做到这一点并不容易。除非性能非常重要,否则我会使用过程语言:https://mariadb.com/kb/en/mariadb/create-procedure/
这会让你按部就班地完成。
我没有时间写出整个查询,但我的建议是,首先在晚上9点生成自1997年以来的所有日期的列表,然后将其过滤到列表中没有出现的日期。然后,对于每个,查询原始表以生成所需的数字。然后将整个列表插入到您的表中。
https://stackoverflow.com/questions/39898109
复制相似问题