• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Postgresql

  • Автор темы AnaStas
  • Дата начала
A

AnaStas

База данных 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) не существует

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

????



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

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

AnaStas

Спасибо за помощь!
Все работает. Для тех, у кого возникнет аналогичный вопрос привожу форму 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". Его не следует применять! Ибо это КОД, а не текст. Будте внимательны при использовании этого момента.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!