我仍然在处理与当我询问my previous question on Stack Overflow时相同的项目。我的SQL表格在这个问题中有完整的描述,我会请你阅读这个来理解我的新问题。两个表之间的对应关系的复杂SQL查询
所不同的是现在这两个表交易和事件是不再同步:现在,时间不完全相同的两个表之间的对应。然而,我知道还有两个表之间一到一个对应关系,这意味着每个贸易有一个相应的事件,但有些事件不对应于贸易。
交易:
id | time | price | volume | foo
-----+-----------+---------+--------+-------
201 | 32400.524 | 53 | 2085 | xxx
202 | 32400.530 | 53 | 1162 | xxx
203 | 32400.531 | 52.99 | 50 | xxx
204 | 32401.532 | 52.91 | 3119 | xxx
205 | 32402.437 | 52.91 | 3119 | xxx
206 | 32402.832 | 52.91 | 3119 | xxx
207 | 32403.255 | 52.91 | 3119 | xxx
208 | 32404.242 | 52.92 | 3220 | xxx
209 | 32405.823 | 52.92 | 3220 | xxx
210 | 32406.839 | 52.92 | 3220 | xxx
活动:
id | time | price | volume | bar
-----+-----------+---------+--------+------
328 | 32399.345 | 52.91 | 3119 | yyy
329 | 32400.964 | 52.91 | 3119 | yyy
330 | 32401.194 | 52.91 | 3119 | yyy
331 | 32401.746 | 52.91 | 3119 | yyy
332 | 32401.823 | 52.91 | 3119 | yyy
333 | 32402.534 | 52.91 | 3119 | yyy
334 | 32402.876 | 52.92 | 3220 | yyy
335 | 32403.839 | 52.92 | 3220 | yyy
336 | 32404.634 | 52.92 | 3220 | yyy
337 | 32405.234 | 52.91 | 2501 | yyy
我想通过使两个表之间的对应关系最小化交易和事件之间的时间差。这是有道理的:如果有多个事件与交易量和价格相对应,那么我们必须从交易中采取最“最迟”的事件。
我试图做以下的事情:
SELECT
t.*,
(SELECT e.id
FROM events o
WHERE e.price = t.price
AND e.volume = t.volume
ORDER BY ABS(o.time - t.time)
LIMIT 1
) as most_probable_corresponding_event_id
FROM trades t
ORDER BY t.time;
但问题是,这个查询不给唯一的对应关系:同一个事件E可以选择不同行业t1和t2,如果这个事件离交易t1和t2最近。我想要的是独家对应。
谢谢你的帮助。
编辑:
的例子DATAS输出我预计会是:
trade_id | order_id | price | volume | bar | foo
-----------+----------+---------+--------+------+-------
204 | 331 | 52.91 | 3119 | xxx | yyy
205 | 333 | 52.91 | 3119 | xxx | yyy
206 | 334 | 52.91 | 3119 | xxx | yyy
207 | 335 | 52.92 | 3220 | xxx | yyy
208 | 336 | 52.92 | 3220 | xxx | yyy
209 | 337 | 52.92 | 3220 | xxx | yyy
您能添加您的预期输出吗? – davejal
好吧,让我来做 – Edouardb
我已经添加了示例数据的预期输出。目标仅仅是为了将xxx和yyy数据集中在一张表中而进行对应。 – Edouardb