Как взять максимум между двумя значениями в presto?

У меня такой запрос:

select id, table1.date1, table2.date2, table1.name
from table1
join table2 using (id)

Я также хочу иметь еще один столбец с MAX(table1.date1, table2.date2), но я не нахожу для этого подходящего синтаксиса. Я не хочу, чтобы MAX проходил по всем строкам в таблице и использовал MAX (). Я хочу, чтобы он выбирал max из двух значений, указанных в строке.

Пример:

id  date1       date2    name    max
1 2020-01-01 2020-04-01   A    2020-04-01
2 2019-02-01 2020-01-03   B    2020-01-03
3 2019-02-01    null      c    2019-02-01

Я также не могу группировать по, потому что не хочу ничего группировать здесь. Это больше похоже на coalesce: дать список функций и выбрать из него максимальное значение.


person HaloKu    schedule 20.05.2020    source источник


Ответы (2)


Используйте greatest():

select id, t1.date1, t2.date2, t1.name,
       greatest(t1.date1, t2.date2)
from table1 t1 join
     table2 t2
     using (id);

Обратите внимание, что greatest() возвращает NULL, если какой-либо аргумент равен NULL. Итак, если у вас есть NULL значений, вам потребуется особая осторожность.

person Gordon Linoff    schedule 20.05.2020

можешь попробовать

select id, table1.date1, table2.date2, table1.name,
case when table1.date1 > table1.date2 then table1.date1 else table1.date2 end as max_date
from table1
join table2 using (id)
person Hung Le    schedule 20.05.2020
comment
да, это сработает, я знаю, но что, если у меня есть список из 10 свиданий? - person HaloKu; 20.05.2020
comment
продолжить случай, когда с вашим состоянием - person Hung Le; 20.05.2020