• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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