Здравствуйте, wildwind, Вы писали:
W>Здравствуйте, Chugu, Вы писали:
W>GROUP BY собирает несколько строк ы одну. Это не поиск строки. Давай объясняй по-русски, чего хочешь.
объясняю:
хочу заменить какойто field10 отфилтрованный этим селектом
т.е. такое вазможно?
uodate table1
set field10=value where [select . . .]
update (select field1, field2, field3
from Table1 A
where (field1, field2, field3) in (Select B.field1, B.field2, max(B.field3)
From Table1 B
Where b.field1 = a.field1
and b.field2 = a.field2))
Set ....
«Национализм во мне столь естественный, что никогда никаким интернационалистам его из меня не вытравить»
Менделеев Д. И.
B>update (select field1, field2, field3
B> from Table1 A
B> where (field1, field2, field3) in (Select B.field1, B.field2, max(B.field3)
B> From Table1 B
B> Where b.field1 = a.field1
B> and b.field2 = a.field2))
B>Set ....
B>
Здравствуйте, Chugu, Вы писали:
C>объясняю: C>хочу заменить какойто field10 отфилтрованный этим селектом C>т.е. такое вазможно?
Все равно не понятно. Но общий принцип такой: составь такой "select * ...", который возвращает все строки, которые нужно обновить. Ровно столько, сколько их есть в таблице, без всякой группировки. Потом передалай select на update.
Здравствуйте, Chugu, Вы писали:
C>Здравствуйте, _d_m_, Вы писали:
___>>Какой такой поиск? Здесь участвуют все строки таблицы.
C>почему все? у меня этот запрос убирает 1/3 table-а
Потомучто все. Но сгруппированные. Нет критерия отбора. А группировка это совсем другое.
А база какая? В Oracle 8.1.7 — всё нормально. Попробуйте так:
update Table1 A
Set ....Where (field1, field2, field3) in (Select B.field1, B.field2, max(B.field3)
From Table1 B
Where b.field1 = a.field1
and b.field2 = a.field2)
«Национализм во мне столь естественный, что никогда никаким интернационалистам его из меня не вытравить»
Менделеев Д. И.
Здравствуйте, wildwind, Вы писали:
W>Здравствуйте, Chugu, Вы писали:
C>>объясняю: C>>хочу заменить какойто field10 отфилтрованный этим селектом C>>т.е. такое вазможно?
W>Все равно не понятно. Но общий принцип такой: составь такой "select * ...", который возвращает все строки, которые нужно обновить. Ровно столько, сколько их есть в таблице, без всякой группировки. Потом передалай select на update.
составить такой select невозможно без группировки — в таблице нет такого fielda каторый определил бы last VisitDate
Здравствуйте, _d_m_, Вы писали:
___>Здравствуйте, Chugu, Вы писали:
C>>Здравствуйте, _d_m_, Вы писали:
___>>>Какой такой поиск? Здесь участвуют все строки таблицы.
C>>почему все? у меня этот запрос убирает 1/3 table-а
___>Потомучто все. Но сгруппированные. Нет критерия отбора. А группировка это совсем другое.
составить нужный select невозможно без группировки — в таблице нет такого fielda каторый определил бы last VisitDate
Здравствуйте, Chugu, Вы писали:
C>Здравствуйте, _d_m_, Вы писали:
___>>Здравствуйте, Chugu, Вы писали:
C>>>Здравствуйте, _d_m_, Вы писали:
___>>>>Какой такой поиск? Здесь участвуют все строки таблицы.
C>>>почему все? у меня этот запрос убирает 1/3 table-а
___>>Потомучто все. Но сгруппированные. Нет критерия отбора. А группировка это совсем другое.
C>составить нужный select невозможно без группировки — в таблице нет такого fielda каторый определил бы last VisitDate
C>а max(field) требует группировку
C>база — InterBase 6.5
Аааа теперь понятно. Ну насчет интербэйза не знаю, но в MS SQL прокатит такое:
update
Table1
set
...
from
Table1 t1
inner join
(select
field1,
field2,
max(field3) as field3MAX
from
Table1
group by
field1, field2
) as t1G
on
t1.field1 = t1G.field1 and
t1.field2 = t1G.field2 and
t1.field3 = t1G.field3MAX