Xpoint
   [напомнить пароль]

Max значение полей

Метки: [без меток]
2006-08-04 17:12:06 [обр] Vladmir[досье]
Простая вроде задача, но не могу решить:
нужно заполнить поле максимальным значением других полей. Т.е. вроде:
update table set maxValField = max (field1, field2, ... fieldN)
спустя 31 минуту [обр] Алексей В. Иванов(2/2861)[досье]
см. функцию GREATEST
спустя 13 часов [обр] Роман Чемисов(0/350)[досье]
Алексей В. Иванов[досье]
А GREATEST это стандартный SQL или какое-то расширение от MySQL?
спустя 8 часов [обр] Алексей В. Иванов(2/2861)[досье]
Должна быть стандартной, но не уверен насчёт MSSQL.
спустя 1 час 51 минуту [обр] Дмитрий Кучкин(3/236)[досье]

Из документации по PostgreSQL:

Note that GREATEST and LEAST are not in the SQL standard, but are a common extension

http://www.postgresql.org/docs......ions-conditional.html#AEN12680

спустя 5 минут [обр] Дмитрий Кучкин(3/236)[досье]
P.S. До версии 8.1 в postgres этих функций не было.
спустя 3 дня [обр] Vladmir[досье]
Всем спасибо за участие, но база от MS - а там нет GREATEST!
спустя 1 день 22 часа [обр] Vladmir[досье]
Неужели никто не подскажет как делать такое сравнение в базах от MS (SQL, Access)? Руками прописывать все варианты нереально!
спустя 1 час 8 минут [обр] GRAy(8/259)[досье]

Можно извратиться с помощью IIF например так (для случая трёх полей):

update table set maxfield = IIF(
  field1>IIF(
    field2>IIF(field3>field4,field3,field4),
    field2,
    IIF(field3>field4,field3,field4)
  ),
  field1,
  IIF(
    field2>IIF(field3>field4,field3,field4),
    field2,
    IIF(field3>field4,field3,field4)
  )
);

Это же можно сделать с помощью CASE. Но примитивная процедура на T-SQL`е была бы гораздо проще

CREATE FUNCTION MyGreatest ( @firstArg int , @secontArg int)
RETURNS int
BEGIN 
  IF (@firstArg>=@secondArg) THEN
    RETURN @firstArg
  ELSE
    RETURN @secondArg
END

Соответсвенно ваш update будет выглядеть так:

update table set maxValue = MyGreatest(field1,MyGreatest(field2,MyGreatest(field3,MyGreatest(field4,field5))));
Powered by POEM™ Engine Copyright © 2002-2005