相关疑难解决方法(0)

Spark SQL 可以在 GROUP BY 聚合中使用 FIRST_VALUE 和 LAST_VALUE(但这不是标准的)

(在 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)

apache-spark-sql

9
推荐指数
1
解决办法
5278
查看次数

使用 T-SQL 将 OHLC-Stockmarket 数据分组到多个时间范围内

我正在使用 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)

t-sql sql-server timestamp finance group-by

5
推荐指数
1
解决办法
2448
查看次数