2010-07-14 5 views
1

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

Вопрос аналогичен этому 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

Would ...

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); 

быть любая помощь?

+1

Я думаю, что вам не хватает имени корреляции 'WHERE t2.groupId = t1.groupId' или что-то еще? –

+0

Хммм. Я не думал, что мне это нужно, но вы, вероятно, правы; Я отредактирую соответственно. –