Eu tenho uma tabela com muitos timestamps, alguns dos quais podem ser nulos. Existe uma maneira de combiná-los todos e manter o carimbo de data/hora mais recente para que eu não precise fazer referência a cada carimbo de data/hora individualmente?
Por exemplo, dado este exemplo simplificado:
SELECT blah
FROM foo
WHERE
ts1 >= '2018-04-17' OR
ts2 >= '2018-04-17' OR
ts3 >= '2018-04-17';
Eu suspeito que deve haver uma maneira de transformá-lo em algo assim:
SELECT blah, somefunc(ts1, ts2, ts3) AS ts
FROM foo
WHERE ts >= '2018-04-17';
Você precisa da
greatest()
função:Sobre NULLs:
Observe que comparar carimbos de data/hora (especialmente carimbos de data/hora com fusos horários) com valores de data simples às vezes resulta em surpresas. Eu sempre tento usar algo como
date_trunc('day', '2018-01-05'::date)
obter um tipo que possa ser comparado de forma limpa.