PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

valeur maximale par ligne (de n colonnes) - Approche élégante

Dans PostgreSQL, vous pouvez utiliser le GREATEST expression :

SELECT GREATEST(date_1, date_2, date_3, date_4, date_5, date_6) AS max_date
...

Comme ce n'est pas du SQL standard, cela ne fonctionnera probablement pas dans d'autres bases de données.

Dans tous les cas, vous pouvez réduire le nombre de comparaisons, puisque le deuxième WHEN expression d'un CASE l'instruction n'est testée que si la première n'était pas 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

Je ne sais pas si vous considérez cela comme plus élégant, mais au lieu du AND clauses que vous pouvez également utiliser ALL avec un VALUES expression :

WHEN date_1 >= ALL (VALUES (date_2), (date_3), (date_4), (date_5), (date_6))
THEN date_1
...