(在 Spark 2.2 和 2.3 上测试)
我正在使用 Spark 将股票交易报价汇总到每日 OHLC(开盘-高-低-收盘)记录中。
输入数据就像
val data = Seq(("2018-07-11 09:01:00", 34.0), ("2018-07-11 09:04:00", 32.0), ("2018-07-11 09:02:00", 35.0), ("2018-07-11 09:03:00", 30.0), ("2018-07-11 09:00:00", 33.0), ("2018-07-12 09:01:00", 56.0), ("2018-07-12 09:04:00", 54.0), ("2018-07-12 09:02:00", 51.0), ("2018-07-12 09:03:00", 50.0), ("2018-07-12 09:00:00", 51.0)).toDF("time", "price")
data.createOrReplaceTempView("ticks")
data.show
scala>
Run Code Online (Sandbox Code Playgroud)
显示为
+-------------------+-----+
| time|price|
+-------------------+-----+
|2018-07-11 09:01:00| 34.0|
|2018-07-11 09:04:00| 32.0|
|2018-07-11 09:02:00| 35.0|
|2018-07-11 09:03:00| 30.0|
|2018-07-11 09:00:00| 33.0|
|2018-07-12 09:01:00| 56.0|
|2018-07-12 09:04:00| 54.0|
|2018-07-12 09:02:00| 51.0|
|2018-07-12 09:03:00| 50.0| …Run Code Online (Sandbox Code Playgroud) 我正在使用 SQL Server 2008 R2,需要创建按时间间隔分组的新表。
该数据是来自股票市场指数的数据。我有 1 分钟间隔的数据,现在我需要 5、10、15、30、45、60...分钟间隔的数据。我的主键是时间戳。
我的问题是:如何查询 1 分钟数据表以返回按特定时间间隔(例如 5 分钟间隔)分组的数据。
查询必须返回该特定组中的最高、最低、最后和第一个值,最重要的是还必须返回组中时间戳的最后一个条目。
我对 SQL 语言非常陌生,并尝试了在网上找到的大量代码,但我无法准确返回所需的结果。
数据:
TimeStamp | Open | High | Low | Close
2012-02-17 15:15:0 | 102 | 110 |100 |105
2012-02-17 15:16:0 |106 |112 |105 |107
2012-02-17 15:17:0 | 106 |110 |98 |105
2012-02-17 15:18:0 |105 |109 |104 |106
2012-02-17 15:19:0 |107 |112 |107 |112
2012-02-17 15:20:0 |115 |125 |115 |124
Run Code Online (Sandbox Code Playgroud)
所需查询结果(5 分钟):
Timestamp |Open|High|Low|Close
2012-02-15:19:0 |102 |125 |98 |124
2012-02-15:24:0 |115.|....|...|...
2012-02-15:29:0 |....|....|...|...
Run Code Online (Sandbox Code Playgroud)