У меня есть таблица с весами, которые я хочу перенормировать в MySQL. Я получаю сообщение об ошибке «Невозможно повторно открыть таблицу», когда пытаюсь присоединить его к встроенному запросу, который полагается на себя, и ту же ошибку, когда я пытаюсь использовать CTE. Пример таблицы ниже:
веса
monthEnd, portName, ticker, wgt
2019-04-30, test, MTUM, 0.20451060987312306
2019-04-30, test, SIZE, 0.20763723114425484
2019-04-30, test, USMV, 0.2043537465059284
2019-04-30, test, QUAL, 0.20758892877605561
2019-04-30, test, VLUE, 0.20683696239330326
Я хотел бы сделать что-то вроде следующего, чтобы перенормировать столбец wgt
(ie, sum (wgt ) = 1):
select a.monthEnd, ticker, wgt/totWgt
from weights a
inner join (
select monthEnd, sum(wgt) as totWgt
from weights
group by monthEnd ) tot
on a.monthEnd = tot.monthEnd
Но я получаю сообщение об ошибке, указывающее:
Error Code: 1137. Can't reopen table: 'a'
Я получаю то же сообщение при попытке сделать это с использованием CTE вместо временной таблицы, и это, похоже, известная проблема в пределах MySQL.
Поскольку мне нужна таблица веса для расчета общего веса, это единственный способ, который я m пытается сделать кажется возможным, это создать еще другую временную таблицу для хранения общего веса и присоединить к ней мою weights таблицу для нормализации.
Есть лучший способ сделать это в MySQL 8.0.