У меня есть обходное решение, возможно, это неправильный путь, но вы можете подумать о наличии дополнительного столбца «temp» в вашей базе данных и определить триггер, который будет обновлять значение temp каждый раз при обновлении столбца даты и в этом триггере, если дата равна NULL, установите временное значение равным 100, а если оно не установлено временным значением, равным 0.
Теперь в вашем запросе выполните сортировку по temp asc, date asc, по которой все даты NOT NULL будут идти первыми, а затем даты, которые равны NULL
PS: Я сам не пробовал, просто попробуй