У меня есть таблица с акциями и ценами.Более того, у меня есть все цены в этой таблице.Теперь я хотел бы получить все MArketCAP в USD (= колонка MarketCap * FXRATE) для всех акций.Оригинальный столбец MarketCAP
указан в местной валюте.Поэтому я должен умножить на последние ставки.
Чтобы получить последние ставки, я сделал следующее:
Пример таблицы:
DROP TABLE IF EXISTS `aktien`;
CREATE TABLE `aktien` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`dummyfield` varchar(255) DEFAULT NULL,
`Company` varchar(255) DEFAULT NULL,
`Stock_Short` varchar(50) DEFAULT NULL,
`country` varchar(10) DEFAULT 'US',
`LastPrice` decimal(17,3) DEFAULT NULL,
`PrevClose` decimal(17,3) DEFAULT NULL,
`PercChange` varchar(50) DEFAULT NULL,
`DayLow` decimal(17,3) DEFAULT NULL,
`DayHigh` decimal(17,3) DEFAULT NULL,
`Dividend` decimal(17,3) DEFAULT '0.000',
`ExDATE` datetime DEFAULT NULL,
`ImportDATE` datetime DEFAULT NULL,
`TradeDate` date DEFAULT NULL,
`refTradeDate` datetime DEFAULT NULL,
`timed` time DEFAULT NULL,
`Open` decimal(17,3) DEFAULT '0.000',
`AfterHrsChange` varchar(200) DEFAULT NULL,
`Volume` bigint(20) DEFAULT '0',
`AskSize` int(17) DEFAULT '0',
`BidSize` int(17) DEFAULT '0',
`AvgDayVol` bigint(20) DEFAULT '0',
`50DMA` decimal(17,3) DEFAULT '0.000',
`200DMA` decimal(17,3) DEFAULT '0.000',
`52WeekHigh` decimal(17,3) DEFAULT '0.000',
`52WeekLow` decimal(17,3) DEFAULT '0.000',
`52WeekRange` varchar(200) DEFAULT NULL,
`MarketCap` varchar(200) DEFAULT NULL,
`EPS` decimal(17,3) DEFAULT '0.000',
`BV` decimal(17,3) DEFAULT '0.000',
`EBITDA` varchar(200) DEFAULT NULL,
`P2S` decimal(17,3) DEFAULT '0.000',
`P2B` decimal(17,3) DEFAULT '0.000',
`PE` decimal(17,3) DEFAULT '0.000',
`Revenue` varchar(200) DEFAULT NULL,
`Mean10LastPrice` decimal(17,3) DEFAULT '0.000',
`Mean20LastPrice` decimal(17,3) DEFAULT '0.000',
`Mean50LastPrice` decimal(17,3) DEFAULT '0.000',
`Mean100LastPrice` decimal(17,3) DEFAULT '0.000',
`Mean200LastPrice` decimal(17,3) DEFAULT '0.000',
`NewHigh` int(1) DEFAULT '0',
`NewLow` int(1) DEFAULT '0',
`stocktype` varchar(50) DEFAULT 'stock',
`NormLastPrice` decimal(17,3) DEFAULT NULL,
`trendcode` int(1) DEFAULT '0',
`Todayflag` int(1) DEFAULT '0',
`KGVC` decimal(17,3) DEFAULT NULL,
`KGVN` decimal(17,3) DEFAULT NULL,
`ShortRatio` decimal(17,3) DEFAULT NULL,
`EPSC` decimal(17,3) DEFAULT NULL,
`EPSN` decimal(17,3) DEFAULT NULL,
`Target1Y` decimal(17,3) DEFAULT NULL,
`AdjClose` decimal(17,3) DEFAULT NULL,
`DMANote` varchar(60) DEFAULT '',
PRIMARY KEY (`id`),
UNIQUE KEY `Stock_Short` (`Stock_Short`,`TradeDate`)
) ENGINE=InnoDB AUTO_INCREMENT=1594308 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `aktien_stack`
--
LOCK TABLES `aktien` WRITE;
/*!40000 ALTER TABLE `aktien_stack` DISABLE KEYS */;
INSERT INTO `aktien` VALUES (1592307,NULL,'LUFTHANSA AG VNA
`O.N','LHA.DE','DE',25.110,24.290,'0.033758733',24.150,25.340,0.800,
'2018-05-09 00:00:00','2018-05-11 20:01:06',
'2018-05-11',NULL,NULL,24.270,NULL,4681038,1900800,948200,3320935,
25.694,27.756,31.260,16.095,NULL,'11862591488',0.000,0.000,
'5404000256',0.333,0.000,4.990,'35650998272',
24.739,25.517,26.056,27.511,26.004,0,0,'stock',
NULL,0,0,0.333,NULL,NULL,NULL,NULL,NULL,NULL,''),
(1592660,NULL,'EUR/USD','EURUSD=X','US',1.194,1.192,'0.0020306304',
1.190,1.197,NULL,NULL,'2018-05-11 23:00:03',
'2018-05-11',NULL,NULL,1.192,NULL,0,0,0,0,1.223,
1.209,1.256,1.086,NULL,NULL,0.000,0.000,NULL,NULL,
0.000,NULL,NULL,0.000,0.000,0.000,0.000,0.000,0,0,
'cur',NULL,0,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'')
/*!40000 ALTER TABLE `aktien_stack` ENABLE KEYS */;
UNLOCK TABLES;
Как мне сделать умножение всего MarketCap на FXRATE всех акций (рассмотримчто LocalCurrencyCountry = страна) в одном операторе?
Я сделал это так: (Я думаю, это может быть сделано с временной таблицей, верно?)

drop table if exists rr;
create TEMPORARY TABLE rr
SELECT s.Stock_Short,
s.country,
rate.country as LocalCurrencyCountry,
s.PrevClose as FXRATE, TradeDate from
(select *,max(id) as maxid from aktien GROUP BY
TradeDate,Stock_short order by id desc) s
join rate on s.Stock_Short = rate.`code` where s.id = maxid
group by LocalCurrencyCountry order by TradeDate desc;
SELECT aktien.MarketCap * FXRATE ,rr.fxrate, Marketcap,
aktien.stock_short from aktien join rr on aktien.country =
rr.localcurrencyCountry group by aktien.country;