从今天的日期开始,我有以下数据库可以追溯到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代码将缺少的行添加到数据库中,不包括星期五和星期六?
答案 0 :(得分:1)
怎么做:
WHERE
子句以折腾Sat / Sun。LEFT JOIN
查看缺少的日期。INSERT
。为什么不这样做:
坦率地说,我认为这是错误的。您现在将拥有一个包含一些有效数据和一些估计数据的表。任何用户(包括你自己)都会被认为是完全有效的数据。请不要构建这样的“谎言”。
答案 1 :(得分:0)
我不认为在查询中这样做很容易。除非性能非常重要,否则我会使用过程语言:https://mariadb.com/kb/en/mariadb/create-procedure/
这可以让你分步进行。
我没有时间写出整个查询,但我的建议是首先生成一个自1997年9点以来所有日期的列表,然后将其过滤到只有不会出现的日期在列表中。然后,为每个查询原始表以生成所需的数字。然后将整个列表插入表中。