0
假設我有一個包含時間戳,價格和股票行列的表。每個時間戳值落在一個分鐘邊界上,但並非所有分鐘都存在於數據中。這些分鐘的行不存在。在MySQL數據集中填充缺失的時間
是否存在純SQL方式來填充缺少分鐘的行,並填充爲的下一行的價格?
改進之處還在於,美國東部時間早上9點半至美國東部時間下午4點之間的分鐘數將會以這種方式重新填充。
假設我有一個包含時間戳,價格和股票行列的表。每個時間戳值落在一個分鐘邊界上,但並非所有分鐘都存在於數據中。這些分鐘的行不存在。在MySQL數據集中填充缺失的時間
是否存在純SQL方式來填充缺少分鐘的行,並填充爲的下一行的價格?
改進之處還在於,美國東部時間早上9點半至美國東部時間下午4點之間的分鐘數將會以這種方式重新填充。
假設行是數據,而不是值,下面一排得到前值:
select t.timestamp,
coalesce(value,
(select value
from t t2
where t2.timestamp < t.timestamp and t2.value is not null
order by t2.timestamp desc
limit 1
)
) as value
from t;
你可以很容易地把這個變成一個更新:
update t join
(select t.timestamp,
(select value
from t t2
where t2.timestamp < t.timestamp and t2.value is not null
order by t2.timestamp desc
limit 1
) as value
from t
) toupdate
on t.timestamp = toupdate.timestamp
set t.value = toupdate.value;
編輯:
如果行丟失,那麼你需要複製它們。假設只是一個連續丟失,那麼下面得到的值:
select t.timestamp + interval 1 minute, value
from t left outer
t tnext
on tnext.timestamp = t.timestamp + interval 1 minute;
where tnext.timestamp is null
您可以將這些成insert
:
insert into t(timestamp, value)
select t.timestamp + interval 1 minute, value
from t left outer
t tnext
on tnext.timestamp = t.timestamp + interval 1 minute;
where tnext.timestamp is null;
對於超過1分鐘的差距較大,我建議簡單地重複insert
直到找不到新行。
行是否丟失?或者是所有分鐘的行只有行中的數據丟失? –
是的行丟失,抱歉沒有更清楚。讓我更新這個問題。 –