我有两张桌子
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
我想把这两张表连在一号桌上。货币和2。时间戳如下:
-
curr
在里面
transactions
必须等于
curr1
在里面
exchange_rates
-
TIMESTAMP
在里面
汇率
必须小于或等于
时间戳
在里面
交易
(因此,我们只收取交易时相关的汇率)
我有这个:
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
但由于输出的行数多于
交易
。
期望输出:
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花费,因此
rate
小于或等于
时间戳
在里面
汇率
即01:30欧元0.92
-
第2行:用户在14:00花费,因此
率
小于或等于
时间戳
在里面
汇率
即1:20美元兑换1.23
-
第3行:用户在01:00花费,因此
率
小于或等于
时间戳
在里面
汇率
即0:00欧元兑换0.89欧元
在PostgreSQL 9.6中,我如何做到这一点
?