首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ohlc(开放,高,低和关闭)记录在两个日期范围内不同时间内(1,5,15,60,120)分钟,1天甚至没有记录

ohlc(开放,高,低和关闭)记录在两个日期范围内不同时间内(1,5,15,60,120)分钟,1天甚至没有记录
EN

Stack Overflow用户
提问于 2017-09-16 07:00:40
回答 1查看 416关注 0票数 2

我有什么

1.我的领域"User_Order"

代码语言:javascript
复制
CREATE TABLE `user_order` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `created_date` datetime DEFAULT NULL,
  `fees` decimal(19,2) NOT NULL,
  `instrument` varchar(255) NOT NULL,
  `is_limit_order` bit(1) NOT NULL,
  `market_id` bigint(20) NOT NULL,
  `order_id` varchar(255) NOT NULL,
  `order_status` varchar(255) NOT NULL,
  `order_type` varchar(255) NOT NULL,
  `price` decimal(20,8) NOT NULL,
  `quantity` decimal(20,8) NOT NULL,
  `remaining_quantity` decimal(20,8) NOT NULL,
  `updated_date` datetime DEFAULT NULL,
  `user_id` bigint(20) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `UK_t5ah1x4wm9314qclf90dy0lyu` (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2.我们在表中有下面的记录.

代码语言:javascript
复制
| id | created_date        | fees   | instrument | is_limit_order | market_id | order_id         | order_status | order_type | price       | quantity   | remaining_quantity | updated_date        | user_id |
+----+---------------------+--------+------------+----------------+-----------+------------------+--------------+------------+-------------+------------+--------------------+---------------------+---------+
|  1 | 2017-09-15 05:08:57 | 0.0100 | INBTCINR   |               |         1 | 12:05:52-0000001 | EXECUTED     | BUY        | 10.00000000 | 2.00000000 |         0.00000000 | 2017-09-15 05:08:57 |       3 |
|  2 | 2017-09-15 05:09:34 | 0.0100 | INBTCINR   |               |         1 | 12:25:43-0000001 | EXECUTED     | SELL       | 10.00000000 | 2.00000000 |         0.00000000 | 2017-09-15 05:09:34 |       4 |
|  3 | 2017-09-15 05:11:18 | 0.0100 | INBTCINR   |               |         1 | 12:05:52-0000002 | CANCELLED    | BUY        |  2.00000000 | 1.00000000 |         1.00000000 | 2017-09-15 05:11:18 |       3 |
|  4 | 2017-09-15 05:12:43 | 0.0100 | INBTCINR   |               |         1 | 12:05:52-0000003 | EXECUTED     | BUY        |  4.00000000 | 2.00000000 |         0.00000000 | 2017-09-15 05:12:43 |       3 |
|  5 | 2017-09-15 05:23:10 | 0.0100 | INBTCINR   |               |         1 | 12:25:43-0000002 | EXECUTED     | SELL       |  4.00000000 | 2.00000000 |         0.00000000 | 2017-09-15 05:23:10 |       4 |
|  6 | 2017-09-15 08:34:17 | 0.0100 | INBTCINR   |               |         1 | 12:25:43-0000003 | OPEN         | BUY        |  2.00000000 | 1.00000000 |         1.00000000 | 2017-09-15 08:34:17 |       4 |
|  7 | 2017-09-15 08:36:32 | 0.0100 | INBTCINR   |               |         1 | 12:05:52-0000004 | CANCELLED    | SELL       |  1.00000000 | 2.00000000 |         2.00000000 | 2017-09-15 08:36:32 |       3 |
|  8 | 2017-09-15 09:24:22 | 0.0100 | INBTCINR   |               |         1 | 12:25:43-0000004 | OPEN         | BUY        |  2.00000000 | 1.00000000 |         1.00000000 | 2017-09-15 09:24:22 |       4 |
|  9 | 2017-09-15 09:30:19 | 0.0100 | INBTCINR   |               |         1 | 12:25:43-0000005 | OPEN         | BUY        |  1.00000000 | 2.00000000 |         2.00000000 | 2017-09-15 09:30:19 |       4 |
| 10 | 2017-09-15 09:32:10 | 0.0100 | INBTCINR   |               |         1 | 12:05:52-0000005 | CANCELLED    | SELL       |  1.00000000 | 2.00000000 |         2.00000000 | 2017-09-15 09:32:10 |       3 |
| 11 | 2017-09-15 10:02:57 | 0.0100 | INBTCINR   |               |         1 | 12:05:52-0000006 | OPEN         | SELL       |  2.00000000 | 4.00000000 |         4.00000000 | 2017-09-15 10:02:57 |       3 |
| 12 | 2017-09-15 10:16:19 | 0.0100 | INBTCINR   |               |         1 | 12:25:43-0000006 | OPEN         | BUY        |  4.00000000 | 2.00000000 |         2.00000000 | 2017-09-15 10:16:19 |       4 |

3.我在下面为每5分钟(每秒300分钟)的间隔记录编写查询。

开始日期= '2017-09-11 : 00:00:00‘结束日期= '2017-09-15 23:59:59’

代码语言:javascript
复制
select  FROM_UNIXTIME(floor(min(UNIX_TIMESTAMP(created_date))/300)*300)
                 as timestampDate,
        sum(quantity) as volume,sum(price*quantity)/sum(quantity) as wavg_price,
        substring_index(min(concat('created_date','_',price)),
                '_',-1) as open,
        max(price) as high,
        min(price) as low,
        substring_index(max(concat ('created_date','_',price)),
                '_',-1) as 'close'
    from  user_order
    where  created_date between '2017-09-11 00:00:00' AND '2017-09-15 23:59:59'
    group by  floor(unix_timestamp(created_date)/300)
    order by  created_date;

上述查询的结果:-

代码语言:javascript
复制
 timestampDate       | volume     | wavg_price              | open        | high        | low         | close       |
+---------------------+------------+-------------------------+-------------+-------------+-------------+-------------+
| 2017-09-15 05:05:00 | 4.00000000 | 10.00000000000000000000 | 10.00000000 | 10.00000000 | 10.00000000 | 10.00000000 |
| 2017-09-15 05:10:00 | 3.00000000 |  3.33333333333333333333 | 2.00000000  |  4.00000000 |  2.00000000 | 4.00000000  |
| 2017-09-15 05:20:00 | 2.00000000 |  4.00000000000000000000 | 4.00000000  |  4.00000000 |  4.00000000 | 4.00000000  |
| 2017-09-15 08:30:00 | 1.00000000 |  2.00000000000000000000 | 2.00000000  |  2.00000000 |  2.00000000 | 2.00000000  |
| 2017-09-15 08:35:00 | 2.00000000 |  1.00000000000000000000 | 1.00000000  |  1.00000000 |  1.00000000 | 1.00000000  |
| 2017-09-15 09:20:00 | 1.00000000 |  2.00000000000000000000 | 2.00000000  |  2.00000000 |  2.00000000 | 2.00000000  |
| 2017-09-15 09:30:00 | 4.00000000 |  1.00000000000000000000 | 1.00000000  |  1.00000000 |  1.00000000 | 1.00000000  |
| 2017-09-15 10:00:00 | 4.00000000 |  2.00000000000000000000 | 2.00000000  |  2.00000000 |  2.00000000 | 2.00000000  |
| 2017-09-15 10:15:00 | 2.00000000 |  4.00000000000000000000 | 4.00000000  |  4.00000000 |  4.00000000 | 4.00000000  |
+---------------------+------------+-------------------------+-------------+-------------+-------------+-------------+

4.上面的结果只给出表永久记录,即使我需要对每个间隔的所有记录都有默认值或透水记录值(打开、关闭、高、低和它们的时间戳)。

预期产出:-

range= '2017-09-11 :00:00:00和'2017-09-15 23:59:59‘

代码语言:javascript
复制
 timestampDate       | volume     | wavg_price              | open        | high        | low         | close       |
+---------------------+------------+-------------------------+-------------+-------------+-------------+-------------+
| 2017-09-11 00:05:00 | 4.00000000 | 10.00000000000000000000 | 10.00000000 | 10.00000000 | 10.00000000 | 10.00000000 |
| 2017-09-11 00:10:00 | 3.00000000 |  3.33333333333333333333 | 2.00000000  |  4.00000000 |  2.00000000 | 4.00000000  |
| 2017-09-11 00:15:00 | 2.00000000 |  4.00000000000000000000 | 4.00000000  |  4.00000000 |  4.00000000 | 4.00000000  |
................................................
.................................................
.................................................
| 2017-09-15 23:05:00 | 1.00000000 |  2.00000000000000000000 | 2.00000000  |  2.00000000 |  2.00000000 | 2.00000000  |
| 2017-09-15 23:10:00 | 1.00000000 |  2.00000000000000000000 | 2.00000000  |  2.00000000 |  2.00000000 | 2.00000000  |
..........................................................
..........................................................
..........................................................

| 2017-09-15 23:50:00 | 1.00000000 |  2.00000000000000000000 | 2.00000000  |  2.00000000 |  2.00000000 | 2.00000000  |
| 2017-09-15 23:55:00 | 1.00000000 |  2.00000000000000000000 | 2.00000000  |  2.00000000 |  2.00000000 | 2.00000000  |

我想要什么

  1. 输出只给表持久记录,即使我需要所有的记录,包括默认值或遍历记录值(打开、关闭、高、低和它们的时间戳)。 案例a) 这里没有“2017-09-11:05:00”的记录。在这种情况下,打开、关闭、高、低值将设置为0(零)。 案例b) 这里没有“2017-09-15 :05:25:00”、“2017-09-15 05:30:00”和“额外”的记录,但这是介于“2017-09-15 05:20:00”和“2017-09-15 8:30:00”两项记录之间的。在这种情况下,ohlc值‘2017-09-1505:25:00’应该是之前的日期时间(‘2017-09-1505:15:00’) ohlc值设定。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2018-09-30 05:09:56

要找到丢失的记录,你需要

  1. 创建一个包含所有所需值的额外表
  2. 从额外表到您已经拥有的查询的LEFT JOIN
  3. 对输出中显示的NULLs做一些处理。

如果您使用的是MariaDB,那么就有一个方便的“序列”生成器。对于步骤1.在MySQL中,我建议您预先构建一个从0到100万的数字表,然后使用+ INTERVAL ... SECOND创建5分钟的日期时间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46251104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档