我可以创建一个用不同的值划分每一行的视图吗?

时间:2014-11-20 15:19:27

标签: mysql views

基本上,我有一张与货币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列中。

那可能吗?

2 个答案:

答案 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'

如果我错过了逻辑中的内容,你可能需要调整它,提前道歉。