sirve que por personalizado para ordenar orden hace fecha descendente datos como ascendente asc alfabeticamente sql postgresql null sql-order-by

que - PostgreSQL ordenar por datetime asc, null primero?



order by personalizado sql server (2)

Necesito ordenar una tabla PostgreSQL ascendente por un campo de fecha / hora, por ejemplo, last_updated .

Pero ese campo puede estar vacío o nulo y quiero registros con nulo en last_updated antes de last_updated .
es posible?

order by last_updated asc /* and null last_updated records first ?? */


PostgreSQL proporciona NULLS FIRST | LAST NULLS FIRST | LAST palabras clave para la cláusula ORDER BY para satisfacer exactamente esa necesidad:

... ORDER BY last_updated NULLS FIRST

Un caso de uso típico es con orden de clasificación descendente ( DESC ), que produce la inversión completa del orden ascendente predeterminado ( ASC ) con valores nulos primero. A menudo no es deseable, por lo tanto, para mantener los valores nulos por última vez:

... ORDER BY last_updated DESC NULLS LAST

Para admitir la consulta con un índice , haga que coincida:

CREATE INDEX foo_idx ON tbl (last_updated DESC NULLS LAST);

Postgres puede leer los índices btree al revés, pero importa dónde se añaden los valores NULL.


Puede crear un ORDER BY personalizado utilizando una sentencia CASE.
La instrucción CASE verifica su condición y asigna a las filas que cumplen con esa condición un valor inferior al asignado a las filas que no cumplen la condición.
Probablemente sea más fácil de entender dado un ejemplo:

SELECT last_updated FROM your_table ORDER BY CASE WHEN last_updated IS NULL THEN 0 ELSE 1 END, last_updated ASC;