Я все еще работаю над тем же проектом, что и когда задал свой предыдущий вопрос о стеке. Переполнение. Мои таблицы SQL полностью описаны в этом вопросе, и я прошу вас прочитать это, чтобы понять мою новую проблему.
Разница теперь в том, что две таблицы trades и events больше не синхронизированы: теперь время в этих двух таблицах не совсем совпадает. . Однако я знаю, что между двумя таблицами по-прежнему существует однозначное соответствие, а это означает, что каждая сделка имеет соответствующее событие, но некоторые события em> не соответствует сделке.
Торги :
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. Чего я хочу, так это вести эксклюзивную переписку.
Спасибо за помощь.
РЕДАКТИРОВАТЬ :
Результат, который я ожидаю для примера данных, будет:
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
32399.345
а есть32400.345
и32398.345
? - person Jorge Campos   schedule 15.12.2015