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
...