PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

valor máximo de linha (de n colunas) - abordagem elegante


No PostgreSQL você pode usar o GREATEST expressão:
SELECT GREATEST(date_1, date_2, date_3, date_4, date_5, date_6) AS max_date
...

Como isso não é SQL padrão, provavelmente não funcionará em outros bancos de dados.

De qualquer forma, você pode reduzir o número de comparações, pois o segundo WHEN expressão de um CASE A instrução só é testada se a primeira não for TRUE :
CASE
   WHEN date_1 >= date_2 AND date_1 >= date_3 AND date_1 >= date_4 AND date_1 >= date_5 AND date_1 >= date_6
   THEN date_1
   WHEN date_2 >= date_3 AND date_2 >= date_4 AND date_2 >= date_5 AND date_2 >= date_6
   THEN date_2
   WHEN date_3 >= date_4 AND date_3 >= date_5 AND date_3 >= date_6
   THEN date_3
   WHEN date_4 >= date_5 AND date_4 >= date_6
   THEN date_4
   WHEN date_5 >= date_6
   THEN date_5
   ELSE date_6
END

Não sei se você considera isso mais elegante, mas em vez do AND cláusulas você também pode usar ALL com um VALUES expressão:
WHEN date_1 >= ALL (VALUES (date_2), (date_3), (date_4), (date_5), (date_6))
THEN date_1
...