Ваш запрос после подстановки значений выглядит как-то так:
INSERT INTO Items SET `itemid` = 'SELECT MAX(`itemid`) FROM `Items`', ...
То есть, код запроса для получения значения itemid оказывается взят в кавычки - никакого запроса не происходит, в itemid пишется строка. Что, по-видимому, является причиной ошибки - itemid, это ведь число, да? Как сделать вставку sql кода в запрос из переменной я сам без понятия, и вообще не уверен, что такое можно сделать.
Кроме того, есть и другая проблема. Если вы попробуете вручную выполнить ваш запрос (через phpmyadmin или ещё как), то получите сообщение о синтаксической ошибке - получение значения itemid следует окружить круглыми скобками:
(SELECT MAX(`itemid`) FROM `Items`)
Ладно, поставили скобки. Теперь-то всё хорошо? Никак нет - получаем ошибку "You can't specify target table 'Items' for update in FROM clause". Корректная вставка в таблицу с получением данных из этой же таблицы будет выглядеть примерно так:
INSERT INTO Items(itemid, title, type)
SELECT MAX(itemid), <значение для title>, <значение для type> FROM Items
В общем, попробуйте что-нибудь вроде этого:
connection.query('INSERT INTO Items(itemid, title, type) SELECT MAX(itemid), ?, ? FROM Items', [ data.title, data.group ])