sql >> Databasteknik >  >> RDS >> PostgreSQL

radvis maximalt värde (av n kolumner) - Elegant tillvägagångssätt

I PostgreSQL kan du använda GREATEST uttryck:

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

Eftersom det inte är standard SQL kommer det förmodligen inte att fungera i andra databaser.

I vilket fall som helst kan du minska antalet jämförelser, sedan den andra WHEN uttryck för ett CASE satsen testas endast om den första inte 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

Jag vet inte om du anser att det är mer elegant, men istället för AND satser du kan också använda ALL med en VALUES uttryck:

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


  1. Oracle - Hur man genererar skript från sql-utvecklare

  2. Grails och MySQL-anslutningsundantag

  3. får ett fel när du infogar flera rader i sql

  4. Funktion för att returnera dynamisk uppsättning kolumner för given tabell