基本上,我有一张与货币A相关的每日货币兑换率的表格,我想提供一个与货币B相关的汇率的视图。
我的表除了自动递增ID外还有三列(包含关联类型):date (date)
,currency (varchar(3))
和conversion_rate (decimal(16, 6))
。让我们说它看起来像这样:
| date | currency | rate_to_A |
| 2014-11-22 | D | 4.00000 |
| 2014-11-22 | B | 0.50000 |
| 2014-11-21 | D | 5.00000 |
| 2014-11-21 | B | 0.25000 |
对于特定日期,我可以生成一个切换货币的选择查询:
SELECT date,
currency,
(conversion_rate / (SELECT conversion_rate FROM currency_rates_to_A WHERE date='2014-11-20' AND currency='B')) AS rate_to_B
FROM currency_rates_to_A
WHERE date='2014-11-20';
但我需要的是一个可以对所有日期(即原始表中的所有数据)执行相同操作的视图。如下所示:
| date | currency | rate_to_B |
| 2014-11-22 | D | 8.00000 | -- 4.00000 / 0.50000
| 2014-11-22 | B | 1.00000 | -- 0.50000 / 0.50000
| 2014-11-21 | D | 20.00000 | -- 5.00000 / 0.25000
| 2014-11-22 | B | 1.00000 | -- 0.25000 / 0.25000
问题在于每一行需要用该日期的B比率进行划分,该比率具有相同的日期,并且值为' B'在currency
列中。
那可能吗?
答案 0 :(得分:1)
您的查询非常接近。您只需将子查询更改为相关子查询:
SELECT cr.*,
(conversion_rate / (SELECT cr2.conversion_rate
FROM currency_rates_to_A cr2
WHERE cr2.date = cr.date AND currency = 'B'
)
) AS rate_to_B
FROM currency_rates_to_A cr;
您也可以使用明确的self join
:
SELECT cr.*, cr.conversion_rate / cr2.conversion_rate as rate_to_B
FROM currency_rates_to_A cr JOIN
currency_rates_to_A cr2
ON cr2.date = cr.date AND cr2.currency = 'B';
答案 1 :(得分:1)
我希望我理解正确(示例表输入和输出可能有帮助),但一般来说你可以做参数化嵌套选择,但最好使用连接。 也许是这样的:
select a1.date, a1.currency, a1.rate/a2.rate
from currency_rate_to_A a1 currency_rate_to_A a2
on a1.date=a2.date and a2.currency='b'
如果我错过了逻辑中的内容,你可能需要调整它,提前道歉。