sql >> Database >  >> RDS >> PostgreSQL

rijgewijze maximale waarde (van n kolommen) - Elegante benadering

In PostgreSQL kun je de GREATEST . gebruiken uitdrukking:

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

Aangezien dat geen standaard SQL is, zal het waarschijnlijk niet werken in andere databases.

U kunt in ieder geval het aantal vergelijkingen verminderen, aangezien de tweede WHEN uitdrukking van een CASE statement wordt alleen getest als de eerste niet TRUE was :

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

Ik weet niet of je dat eleganter vindt, maar in plaats van de AND clausules die u ook kunt gebruiken ALL met een VALUES uitdrukking:

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


  1. Oracle ORA-12154 fout op lokale IIS, maar niet met Visual Studio Development Server

  2. Oracle:DDL en transactie terugdraaien

  3. Waarom is een UDF zo veel langzamer dan een subquery?

  4. Verbindingsbeheer in PostgreSQL:een gids