2017-11-13 21 views
0

誰でも、1分間隔でOHLC(Open \ High \ Low \ Close)にtick-by-tickデータを変換するSQLクエリを手伝ってもらえますか?私はHighとLowのデータを得ることができましたが、OpenとCloseで問題がありました。答えといくつかの類似の質問がありますSQL Server:OHLCへのtick-by-tickデータ

idc ServerDateTime   iDateTime sSymbol cAsk cBid Spread 
--------------------------------------------------------------------------- 
2539581 2017-11-13 00:14:56.357 1510539296 EURUSD 1.16473 1.16460 0.00013 
2539582 2017-11-13 00:14:56.373 1510539296 EURUSD 1.16475 1.16461 0.00014 
2539583 2017-11-13 00:14:56.423 1510539296 EURUSD 1.16476 1.16462 0.00014 
2539584 2017-11-13 00:14:56.520 1510539296 EURUSD 1.16477 1.16463 0.00014 
2539585 2017-11-13 00:14:56.643 1510539296 EURUSD 1.16478 1.16463 0.00015 
2539586 2017-11-13 00:14:58.207 1510539298 EURUSD 1.16478 1.16464 0.00014 
2539587 2017-11-13 00:14:59.477 1510539299 EURUSD 1.16477 1.16464 0.00013 
2539588 2017-11-13 00:15:00.337 1510539300 EURUSD 1.16477 1.16463 0.00014 
2539589 2017-11-13 00:15:00.747 1510539300 EURUSD 1.16478 1.16463 0.00015 
2539590 2017-11-13 00:15:00.873 1510539300 EURUSD 1.16477 1.16463 0.00014 
2539591 2017-11-13 00:15:01.510 1510539301 EURUSD 1.16477 1.16464 0.00013 

が、これらはPythonとMySQLのためのものです:

私のサンプルデータは、次のようになります。

+0

どのバージョンのSQL Serverですか?私はあなたがオープン・クローズで問題を抱えている理由を知ることができます。なぜなら、それらはデータから欠けている最後の取引価格から派生しているからです。 –

+0

バージョンはSQL Server 2017です。上記のデータから新しいサンプルを取得しました。私のデータは実際に2百万人以上あります。行。 –

答えて

1

最終的に私はこのリンクで見つけた解決策を見つけました。 http://data.stackexchange.com/stackoverflow/query/61772/new

select min(ServerDateTime) as DateTime 
,  max(cBid) as Highest 
,  min(cBid) as Lowest 
,  min(case when rn_asc = 1 then [cBid] end) as first 
,  min(case when rn_desc = 1 then [cBid] end) as Last 
from (
     select row_number() over (
        partition by cast(cast(ServerDateTime as float) * 60 * 24 as int) 
        order by ServerDateTime) as rn_asc 
     ,  row_number() over (
        partition by cast(cast(ServerDateTime as float) * 60 * 24 as int) 
        order by ServerDateTime desc) as rn_desc 
     ,  * 
     from dbo.MT4TICK 
     ) as SubQueryAlias 

group by 
     cast(cast(ServerDateTime as float) * 60 * 24 as int) 
order by DateTime 
関連する問題