本质上,我有一个表格,其中包含与货币 A 相关的每日货币兑换率,并且我想提供与货币 B 相关的汇率 View 。
除了自动递增 ID 之外,我的表还包含三列(具有关联类型):date (date)
、currency (varchar(3))
和 >conversion_rate(十进制(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';
但我需要的是一个可以对所有日期(即原始表中的所有数据)执行相同操作的 View 。类似于以下内容:
| 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 汇率(该汇率具有相同的日期)以及 currency
列中的值“B”。
这可能吗?
最佳答案
您的查询非常接近。您只需将子查询更改为相关子查询即可:
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;
您还可以通过显式自连接
来执行此操作:
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';
关于mysql - 我可以创建一个 View ,将每隔几行划分为不同的值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27043101/