1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

Postgresql

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

  1. AnaStas

    AnaStas Well-Known Member

    Репутация:
    0
    Регистрация:
    16 сен 2008
    Сообщения:
    52
    Симпатии:
    0
    База данных PostgreSQL содержит некую таблицу table с колонками ctime, mtime, utime.
    Запрос SELECT, формируя строку, должен взять максимальное значение даты из этих трех колонок, т.е. нечто вроде функции max(ctime, mtime, utime). Что-то подобное должно быть, но ни ActivePerl User Guide, ни агрегатные функции SQL не дают ответа на решение этой проблемы.
    Perl-код упрощенно такой:
    Код:
    $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. ????

    ???? Гость

    Репутация:
    0
    http://www.postgresql.org/docs/8.4/static/...onditional.html

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

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

    AnaStas Well-Known Member

    Репутация:
    0
    Регистрация:
    16 сен 2008
    Сообщения:
    52
    Симпатии:
    0
    Спасибо за помощь!
    Все работает. Для тех, у кого возникнет аналогичный вопрос привожу форму Perl-запроса:
    Код:
    . . . . . . 
    $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. Lisenok
    Ответов:
    0
    Просмотров:
    165
  2. Rocket
    Ответов:
    3
    Просмотров:
    493
  3. JohnLemon
    Ответов:
    19
    Просмотров:
    1.674
  4. AnaStas
    Ответов:
    5
    Просмотров:
    4.904
  5. Akupaka
    Ответов:
    12
    Просмотров:
    4.467

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