我有两张桌子
exchange_rates
TIMESTAMP curr1 curr2 rate
2018-04-01 00:00:00 EUR GBP 0.89
2018-04-01 01:30:00 EUR GBP 0.92
2018-04-01 01:20:00 USD GBP 1.23
和
transactions
TIMESTAMP user curr amount
2018-04-01 18:00:00 1 EUR 23.12
2018-04-01 14:00:00 1 USD 15.00
2018-04-01 01:00:00 2 EUR 55.00
我想通过以下方式将这两个表链接到 1. currency 和 2. TIMESTAMP:
curr
intransactions
必须等于curr1
inexchange_rates
TIMESTAMP
inexchange_rates
必须小于或等于TIMESTAMP
intransactions
(所以我们只选择交易时相关的汇率)
我有这个:
SELECT
trans.TIMESTAMP, trans.user,
-- Multiply the amount in transactions by the corresponding rate in exchange_rates
trans.amount * er.rate AS "Converted Amount"
FROM transactions trans, exchange_rates er
WHERE trans.curr = er.curr1
AND er.TIMESTAMP <= trans.TIMESTAMP
ORDER BY trans.user
但这链接了两个很多结果,因为输出的行数比transactions
.
期望的输出:
TIMESTAMP user Converted Amount
2018-04-01 18:00:00 1 21.27
2018-04-01 14:00:00 1 18.45
2018-04-01 01:00:00 2 48.95
背后的逻辑Converted Amount
:
- 第 1 行:用户在 18:00 消费,因此在 01:30 取
rate
小于或等于TIMESTAMP
inexchange_rates
即 0.92 的欧元 - 第 2 行:用户在 14:00 消费,因此在 01:20 取
rate
小于或等于TIMESTAMP
inexchange_rates
即 1.23 美元的金额 - 第 3 行:用户在 01:00 消费,因此在 00:00 取
rate
小于或等于TIMESTAMP
inexchange_rates
即 0.89 欧元的金额
如何在 postgresql 9.6 中执行此操作?