PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

valore massimo per riga (di n colonne) - Approccio elegante

In PostgreSQL puoi usare GREATEST espressione:

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

Dal momento che non è SQL standard, probabilmente non funzionerà in altri database.

In ogni caso, puoi ridurre il numero di confronti, dal momento che il secondo WHEN espressione di un CASE l'istruzione viene verificata solo se la prima non era 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

Non so se lo consideri più elegante, ma invece di AND clausole potresti anche usare ALL con un VALUES espressione:

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