Postgresql

Тема в разделе "SQL", создана пользователем AnaStas, 26 окт 2009.

  1. AnaStas

    AnaStas Well-Known Member

    Регистрация:
    16 сен 2008
    Сообщения:
    52
    Симпатии:
    0
    База данных PostgreSQL содержит некую таблицу table с колонками ctime, mtime, utime.
    Запрос SELECT, формируя строку, должен взять максимальное значение даты из этих трех колонок, т.е. нечто вроде функции max(ctime, mtime, utime). Что-то подобное должно быть, но ни ActivePerl User Guide, ни агрегатные функции SQL не дают ответа на решение этой проблемы.
    Perl-код упрощенно такой:
    Код (Text):
    $mds=$dbh->selectall_arrayref("SELECT id,param1,param2,param3,max(ctime,mtime,utime),param4
    FROM table ORDER BY id") or die $dbh->errstr;
    . . . . . .
    Реакция системы такова:
    ERROR: функция max(timestamp without time zone, timestamp without time zone, timestamp without time zone) не существует

    Прошу у специалистов консультацию.
     
  2. ????

    ???? Гость

    http://www.postgresql.org/docs/8.4/static/...onditional.html

    рисуешь большой case в котором выбираешь нужное значение.

    там еще и GREATEST(value [, ...]) есть, но я ни разу не использовал, а проверить не могу
     
  3. AnaStas

    AnaStas Well-Known Member

    Регистрация:
    16 сен 2008
    Сообщения:
    52
    Симпатии:
    0
    Спасибо за помощь!
    Все работает. Для тех, у кого возникнет аналогичный вопрос привожу форму Perl-запроса:
    Код (Text):
    . . . . . .
    $mds=$dbh->selectall_arrayref("SELECT id,param1,param2,param3,CASE WHEN (ctime<=mtime) AND (mtime<=utime) THEN utime WHEN ctime<=mtime THEN mtime ELSE ctime END AS maxdat,param4
    FROM table ORDER BY maxdat") or die $dbh->errstr;
    . . . . . .
    Читабельность, конечно, не очень "приятно" выглядит, но весь этот CASE можно представить в виде функции типа MAX_3(ctime,mtime,utime) с return максимального значения.
    Что же касается GREATEST(value [, ...]) и LEAST(value [, ...]), т.е. максимального и минимального значений из списка, у меня не сработало. А жаль - замечательные функции.
    Тема закрыта.


    P.S.
    Прошу извинить за допущенную мною глупость - для выделения в приведенном коде вставлен "bold". Его не следует применять! Ибо это КОД, а не текст. Будте внимательны при использовании этого момента.
     
Загрузка...
Похожие Темы - Postgresql
  1. JohnLemon
    Ответов:
    19
    Просмотров:
    1.380
  2. AnaStas
    Ответов:
    5
    Просмотров:
    4.762
  3. Akupaka
    Ответов:
    12
    Просмотров:
    4.330

Поделиться этой страницей