将 OHLC-Stockmarket 数据分组到多个时间框架 - Mysql
问题:将 OHLC-Stockmarket 数据分组到多个时间框架 - Mysql 我需要将具有 {Name, DateTime, Open, High, Low, Close, Volume} 的股票市场“1min”数据分组到不同的时间范围内,即。 MYSQL 上的“5 分钟/15 分钟/60 分钟”。基于 sqlfiddle -http://sqlfiddle.com/#!2/91433的架构
问题:将 OHLC-Stockmarket 数据分组到多个时间框架 - Mysql
我需要将具有 {Name, DateTime, Open, High, Low, Close, Volume} 的股票市场“1min”数据分组到不同的时间范围内,即。 MYSQL 上的“5 分钟/15 分钟/60 分钟”。基于 sqlfiddle -http://sqlfiddle.com/#!2/91433的架构。
我找到了一个链接 -使用 T-SQL将 OHLC-Stockmarket 数据分组到多个时间框架中,对 MSSQL 有类似的要求。
我试图按照链接 -http://briansteffens.com/2011/07/19/row_number-partition-and-over-in-mysql/,获取 row_number(), over, partition在mysql中解决问题。
我是 sql 的新手,谁能指出我正确的方向?
解答
最后用下面的mysql查询解决了这个问题:
select min(a.mydate),max(a.myhigh) as high,min(a.mylow) as low,
min(case when rn_asc = 1 then a.myopen end) as open,
min(case when rn_desc = 1 then b.myclose end) as close
from(
select
@i := if((@lastdate) != (Floor(unix_timestamp(mydate)/300 )), 1, @i + 1) as rn_asc,
mydate, myhigh, mylow, myopen, myclose,
@lastdate := (Floor(unix_timestamp(mydate)/300 ))
from
onemindata_1,
(select @i := 0) vt1,
(select @lastdate := null) vt2 order by mydate
) a
inner join(
select
@j := if((@lastdate1) != (Floor(unix_timestamp(mydate)/300 )), 1, @j + 1) as rn_desc,
mydate,myclose,
@lastdate1 := (Floor(unix_timestamp(mydate)/300 ))
from
onemindata_1,
(select @j := 0) vt1,
(select @lastdate1 := null) vt2 order by mydate desc
)b
on a.mydate=b.mydate
group by (Floor(unix_timestamp(a.mydate)/300 ))
最困难的部分是获得“特定时间间隔”的打开和关闭。我正在对“日期”进行“高、低、开”和“关闭”的内部连接。我可以通过更改 (Floor(unix_timestamp(mydate)/300)) 中的分母来切换时间间隔。目前不担心性能,只要它有效:)。
更多推荐
所有评论(0)