Consulta avanzada de SQL usando UNION

Ejemplo práctico de la instrucción UNION para obtener una lista de elementos ordenados

En muchas bases de datos como MySQL, PostgreSQL, etc que usan el lenguaje SQL permiten usar una instrucción llamada UNION, que permite unir los resultados de varias consultas. El problema que me encontré es que los resultados que devuelve unidos sólo se pueden ordenar de forma general, no por cada consulta individual. Veamos un ejemplo práctico.

Imaginad que queremos hacer una consulta que nos devuelva un conjunto de elementos ordenados por fecha, de modo que nos muestre los x primeros elementos ordenados de una forma y los y siguientes de otra.

SELECT title, IFNULL(eventos_proximos,eventos_pasados)
FROM (
  (
    SELECT title, begin_at as eventos_proximos,null as eventos_pasados FROM eventos
    WHERE begin_at >= NOW()
  )
  UNION
  (
    SELECT title, null, begin_at FROM eventos AND begin_at < NOW()
  )
) t2
ORDER BY eventos_proximos, eventos_pasados DESC;

En PostgreSQL podemos usar COALESCE en vez de IFNULL para comprobar que si el valor es nulo, y en Oracle podríamos usar la funcion NVL.