Обновление строки для каждой группы с максимальным значением в другом столбце - PullRequest
1 голос
/ 14 июля 2010

Мне нужно обновить столбец в очень, очень большой таблице.Таким образом, производительность является большой проблемой.

Вопрос похож на этот one , но только для Sybase Adaptive Server Enterprise (ASE 12.5.4), плюс мне нужно обновитьизвлеченные строки.Есть ли способ сделать это без самостоятельного объединения, как в ответе Oracle, получившем наибольшее количество голосов?

Это была первая попытка с объединением, но по приказу она замедлилась для таблицы, для которой она предназначена:

UPDATE table SET flag = 1
FROM table AS a1
LEFT OUTER JOIN table AS a2
ON (a1.groupId = a2.groupId AND a1.id < a2.id)
WHERE a2.groupId IS NULL
and a1.somename in ('x', 'y')

1 Ответ

1 голос
/ 14 июля 2010

Будет ...

UPDATE table AS t1 SET flag = 1
    WHERE t1.somename IN ('x', 'y') AND
          t1.id = (SELECT MAX (t2.id)
                    FROM table t2
                    WHERE t2.groupId = t1.groupId);

будет какая-нибудь помощь?

...