sql >> Databáze >  >> RDS >> PostgreSQL

Maximální hodnota po řádcích (z n sloupců) - Elegantní přístup

V PostgreSQL můžete použít GREATEST výraz:

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

Protože to není standardní SQL, pravděpodobně to nebude fungovat v jiných databázích.

V každém případě můžete snížit počet porovnávání, od druhého WHEN výraz CASE příkaz je testován pouze v případě, že první nebyl 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

Nevím, jestli to považujete za elegantnější, ale místo AND klauzule můžete také použít ALL s VALUES výraz:

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


  1. Knex.js – Jak aktualizovat pole pomocí výrazu

  2. Funkce Oracle Lag s dynamickým parametrem

  3. Nesprávný soubor klíče s MySQL

  4. Jak Rails vytváří MySQL příkaz?