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

rækkevis maksimal værdi (af n kolonner) - Elegant tilgang

I PostgreSQL kan du bruge GREATEST udtryk:

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

Da det ikke er standard SQL, vil det sandsynligvis ikke fungere i andre databaser.

I hvert fald kan du reducere antallet af sammenligninger, siden den anden WHEN udtryk for en CASE sætningen testes kun, hvis den første ikke var 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

Jeg ved ikke, om du anser det for mere elegant, men i stedet for AND klausuler kan du også bruge ALL med en VALUES udtryk:

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


  1. Skinner - SQLite3::SQLEundtagelse:nær USING:syntaksfejl

  2. Skillevægge og højvandsmærke i Oracle

  3. Broken Pipe Exception on Grails App

  4. Sekvenser ikke påvirket af transaktioner?