У меня есть таблица курсов и транзакций, по которой я хочу узнать курс обмена на основе последнего обновленного курса валюты (относится к отметке времени транзакции)
Table - rates
('2018-04-01 00:00:00', 'EUR', 'RUB', '1.71'),
('2018-04-01 01:00:05', 'EUR', 'RUB', '1.82'),
('2018-04-01 00:00:00', 'USD', 'RUB', '0.71'),
('2018-04-01 00:00:05', 'USD', 'RUB', '0.82'),
('2018-04-01 00:01:00', 'USD', 'RUB', '0.92'),
('2018-04-01 01:02:00', 'USD', 'RUB', '0.62'),
Table - transactions
('2018-04-01 00:00:00', 1, 'EUR', 2.45),
('2018-04-01 01:00:00', 1, 'EUR', 8.45),
('2018-04-01 01:30:00', 1, 'USD', 3.5),
Моя попытка ограничить эти дополнительные данные
select * from transactions tr1
left outer join rates ex1
on tr1.ts >= ex1.ts
and tr1.currency = ex1.from_currency;
Результат, который я получаю, содержит все обновления обменного курса, которые произошли ранее 2
2018-04-01 00:00:00 1 EUR 2.45 2018-04-01 00:00:00 EUR RUB 1.71 (correct)
2018-04-01 01:00:00 1 EUR 8.45 2018-04-01 00:00:00 EUR RUB 1.71 (correct)
2018-04-01 01:30:00 1 USD 3.5 2018-04-01 01:02:00 USD RUB 0.62 (only this should remain)
2018-04-01 01:30:00 1 USD 3.5 2018-04-01 00:01:00 USD RUB 0.92
2018-04-01 01:30:00 1 USD 3.5 2018-04-01 00:00:05 USD RUB 0.82
2018-04-01 01:30:00 1 USD 3.5 2018-04-01 00:00:00 USD RUB 0.71
Я пытался определить свое собственное утверждение (мой предыдущий запрос):
where ex1.ts = (select max(ex2.ts) from rates ex2
where ex2.from_currency=ex1.from_currency
and ex2.to_currency=ex1.from_currency);
Но это ничего не возвращает ...