我们有一张table共享。它包含特定股票的买入和卖出订单。所有买入的股票将在同一天卖出,反之亦然。在某些情况下,单独购买的股票可以一起出售,反之亦然。例如,在2023-03-31
上,数量为1的GOOGLE股票以10:03:34
和10:03:42
的价格出售,数量为2的股票以11:18:11
的价格购买。相反的情况也有可能发生,当股票被大量购买并在分销中出售时。
time_in_seconds通过将hh:mm:ss转换为秒从time列派生。
保证记录按order_execution_time排序。
我们需要计算每笔股票买入/卖出之间的平均持续时间。例如,在2023-03-31
上,以10:03:34
卖出的1股GOOGLE股票以11:18:11
买回,以10:03:42
卖出的另一股GOOGLE股票以11:18:11
买回(注:2股一起买)
总时间差:(40691 - 36214)+(40691 - 36222)= 8946
总交易量:2
平均持续时间:8946 / 2 = 4473秒
CREATE TABLE shares (
symbol TEXT NOT NULL,
trade_type TEXT NOT NULL,
quantity integer,
price integer,
order_execution_time TEXT,
time TEXT,
time_in_seconds integer
);
INSERT INTO shares VALUES ('APPLE','sell',1, 539.2, '2023-02-17T09:38:59', '09:38:59', 34739); -- first order of selling share of APPLE. One trade active now.
INSERT INTO shares VALUES ('APPLE','buy',1, 536.7, '2023-02-17T10:40:05','10:40:05', 38405); -- sold share previously for APPLE bought back, No shares left to trade.
INSERT INTO shares VALUES ('GOOGLE','buy',1, 862.5, '2023-02-17T10:59:45','10:59:45', 39585); -- GOOGLE 1 share bought
INSERT INTO shares VALUES ('GOOGLE','sell',1, 861.05, '2023-02-17T12:55:22','12:55:22', 46522); -- GOOGLE 1 share sold. No shares left to trade.
INSERT INTO shares VALUES ('GOOGLE','sell',1, 876.05, '2023-03-31T10:03:34','10:03:34', 36214); -- GOOGLE 1 share sold
INSERT INTO shares VALUES ('GOOGLE','sell',1, 876.25, '2023-03-31T10:03:42','10:03:42', 36222); -- GOOGLE 1 shares sold (Now total 2 shares sold GOOGLE)
INSERT INTO shares VALUES ('GOOGLE','buy',2, 876.15, '2023-03-31T11:18:11','11:18:11', 40691); -- GOOGLE 2 shares bought together at same time. No shares left to trade.
1条答案
按热度按时间ccrfmcuu1#
这个表格定义解决了原始帖子中存在的一些设计问题:
下面插入与原始帖子相同的信息:
此查询返回每个交易日期的补充交易之间的平均时间(以秒为单位):
此查询取决于每天是否有平衡的买入和卖出数量。检查列
is_balanced
表示满足此要求的每一天的TRUE
。当使用示例数据运行时,查询将生成:
| 符号|交易日期|平均时间秒|平衡|
| --------------|--------------|--------------|--------------|
| 苹果|2019 -02-17 00:00:00|3666.00000000000000000|
TRUE
|| 谷歌|2019 -02-17 00:00:00|6937.00000000000000000|
TRUE
|| 谷歌|2023-03-31 00:00:00|4473.00000000000000000|
TRUE
|以下查询通过忽略不匹配的数量来处理不平衡的每日交易: