UPDATE help
От: Chugu  
Дата: 26.01.05 10:21
Оценка:
как найти строку для UPDATE когда поиск строки выглядит примерно так:

select field1, field2, max(field3) 
from Table1 
group by field1, field2
Re: UPDATE help
От: wildwind Россия  
Дата: 26.01.05 10:31
Оценка:
Здравствуйте, Chugu, Вы писали:

GROUP BY собирает несколько строк ы одну. Это не поиск строки. Давай объясняй по-русски, чего хочешь.
Re: UPDATE help
От: _d_m_  
Дата: 26.01.05 10:31
Оценка:
Здравствуйте, Chugu, Вы писали:

C>как найти строку для UPDATE когда поиск строки выглядит примерно так:


C>
C>select field1, field2, max(field3) 
C>from Table1 
C>group by field1, field2
C>


Какой такой поиск? Здесь участвуют все строки таблицы.
Re[2]: UPDATE help
От: Chugu  
Дата: 26.01.05 10:37
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>Какой такой поиск? Здесь участвуют все строки таблицы.


почему все? у меня этот запрос убирает 1/3 table-а
Re[2]: UPDATE help
От: Chugu  
Дата: 26.01.05 10:44
Оценка:
Здравствуйте, wildwind, Вы писали:

W>Здравствуйте, Chugu, Вы писали:


W>GROUP BY собирает несколько строк ы одну. Это не поиск строки. Давай объясняй по-русски, чего хочешь.


объясняю:
хочу заменить какойто field10 отфилтрованный этим селектом
т.е. такое вазможно?

uodate table1
set field10=value where [select . . .]
Re: UPDATE help
От: biochemist СССР https://www.anekdot.ru/i/caricatures/normal/20/7/27/1595846503.jpg
Дата: 26.01.05 11:08
Оценка:
Здравствуйте, Chugu, Вы писали:

C>как найти строку для UPDATE когда поиск строки выглядит примерно так:


C>
C>select field1, field2, max(field3) 
C>from Table1 
C>group by field1, field2
C>



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 ....
«Национализм во мне столь естественный, что никогда никаким интернационалистам его из меня не вытравить»
Менделеев Д. И.
Re[2]: UPDATE help
От: Chugu  
Дата: 26.01.05 11:40
Оценка:
Здравствуйте, biochemist, Вы писали:

B>
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>


SQL SYNTAX ERROR
Re[3]: UPDATE help
От: wildwind Россия  
Дата: 26.01.05 13:47
Оценка:
Здравствуйте, Chugu, Вы писали:

C>объясняю:

C>хочу заменить какойто field10 отфилтрованный этим селектом
C>т.е. такое вазможно?

Все равно не понятно. Но общий принцип такой: составь такой "select * ...", который возвращает все строки, которые нужно обновить. Ровно столько, сколько их есть в таблице, без всякой группировки. Потом передалай select на update.
Re: UPDATE help
От: rus blood Россия  
Дата: 26.01.05 13:55
Оценка:
Здравствуйте, Chugu, Вы писали:

C>как найти строку для UPDATE когда поиск строки выглядит примерно так:


C>
C>select field1, field2, max(field3) 
C>from Table1 
C>group by field1, field2
C>


Какая база???

В сиквеле вроде можно так...

UPDATE Table1 t SET ...
FROM (SELECT field1, field2, max(field3) AS _field3 FROM ...) q
WHERE t.field1 = q.field1 AND ...
Имею скафандр — готов путешествовать!
Re[3]: UPDATE help
От: _d_m_  
Дата: 27.01.05 01:38
Оценка:
Здравствуйте, Chugu, Вы писали:

C>Здравствуйте, _d_m_, Вы писали:


___>>Какой такой поиск? Здесь участвуют все строки таблицы.


C>почему все? у меня этот запрос убирает 1/3 table-а


Потомучто все. Но сгруппированные. Нет критерия отбора. А группировка это совсем другое.
Re[3]: UPDATE help
От: biochemist СССР https://www.anekdot.ru/i/caricatures/normal/20/7/27/1595846503.jpg
Дата: 27.01.05 03:51
Оценка:
Здравствуйте, Chugu, Вы писали:

...
C>SQL SYNTAX ERROR

А база какая? В 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)
«Национализм во мне столь естественный, что никогда никаким интернационалистам его из меня не вытравить»
Менделеев Д. И.
Re[4]: UPDATE help
От: Chugu  
Дата: 27.01.05 09:06
Оценка:
Здравствуйте, wildwind, Вы писали:

W>Здравствуйте, Chugu, Вы писали:


C>>объясняю:

C>>хочу заменить какойто field10 отфилтрованный этим селектом
C>>т.е. такое вазможно?

W>Все равно не понятно. Но общий принцип такой: составь такой "select * ...", который возвращает все строки, которые нужно обновить. Ровно столько, сколько их есть в таблице, без всякой группировки. Потом передалай select на update.


составить такой select невозможно без группировки — в таблице нет такого fielda каторый определил бы last VisitDate

а база — InterBase 6.5
Re[4]: UPDATE help
От: Chugu  
Дата: 27.01.05 09:10
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>Здравствуйте, Chugu, Вы писали:


C>>Здравствуйте, _d_m_, Вы писали:


___>>>Какой такой поиск? Здесь участвуют все строки таблицы.


C>>почему все? у меня этот запрос убирает 1/3 table-а


___>Потомучто все. Но сгруппированные. Нет критерия отбора. А группировка это совсем другое.



составить нужный select невозможно без группировки — в таблице нет такого fielda каторый определил бы last VisitDate

а max(field) требует группировку

база — InterBase 6.5
Re[5]: UPDATE help
От: _d_m_  
Дата: 28.01.05 02:23
Оценка:
Здравствуйте, 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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.