Попробуйте использовать MAX
в качестве функции c здесь:
SELECT
id,
groupid,
MAX(category) OVER (PARTITION BY groupid) category
FROM yourTable
ORDER BY
id;
Здесь будет работать функция MAX
, потому что она игнорирует значения NULL
внутри группы, возвращая non NULL
значение категории.
Предполагается, что вы намерены назначить один и тот же цвет для всех записей в данном groupid
. Кроме того, если это так, то это может означать, что ваша модель данных не полностью нормализована, и цвета для каждой группы должны существовать во второй таблице сопоставления, например,
groupid | category
1 | red
2 | blue
3 | green
В версиях MySQL ранее, чем 8+, вы можете использовать соединение для достижения того же результата:
SELECT
t1.id,
t1.groupid,
t2.category
FROM yourTable t1
INNER JOIN
(
SELECT groupid, MAX(category) AS category
FROM yourTable
GROUP BY groupid
) t2
ON t1.groupid = t2.groupid
ORDER BY
id;
Изменить:
Для фактического обновления вы можете используйте соединение обновления, подобное приведенному выше:
UPDATE yourTable t1
INNER JOIN
(
SELECT groupid, MAX(category) AS category
FROM yourTable
GROUP BY groupid
) t2
ON t1.groupid = t2.groupid
SET
t1.category = t2.category
WHERE
t1.category IS NULL;