Un detalle:
Si el campo FECHA tiene como valor '0000-00-00' (que representa el NULL de un campo DATE), ¿cómo haces para saber cuál es el más antiguo y cuál el mas reciente de los registros? ¿Tienes algún otro campo DATE, TIME o DATETIME que sirva para saberlo?
El resto es más o menos simple: Primero haces la consulta por la diferencia a '0000-00-00' o con el NULL (por las dudas), ordenándolo por no sé cual campo, y después le haces un UNION ALL con otra consulta que te devuelva el resto.
Algo así como
Código:
SELECT *
FROM
(SELECT *
FROM tabla
WHERE FECHA <> '0000-00-00' OR FECHA IS NULL
ORDER BY CampoDesconocido ASC) AS tabla1
UNION ALL
(SELECT *
FROM tabla
WHERE FECHA = '0000-00-00'
ORDER BY CampoDesconocido ASC) AS tabla2
Tip:
Una consulta que devuelva dos conjuntos unidos, cada uno con su propio ordenamiento DEBE tener en cada subconsulta el ORDER BY, pero la UNION requiere que haya un sólo ORDER BY al final de las selecciones unidas, por lo que para que no genere un error de sintaxis hay que hacerlo como las puse: generar con cada selección una tabla virtual y unirlas ambas.