sql >> Base de Datos >  >> RDS >> PostgreSQL

valor máximo por filas (de n columnas) - Enfoque elegante

En PostgreSQL puedes usar el GREATEST expresión:

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

Dado que no es SQL estándar, probablemente no funcionará en otras bases de datos.

En cualquier caso, puede reducir el número de comparaciones, ya que el segundo WHEN expresión de un CASE la declaración solo se prueba si la primera no fue 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

No sé si lo consideras más elegante, pero en lugar de AND cláusulas también podría usar ALL con un VALUES expresión:

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