Почему последние значения NULL для заказа SQL сохраняются?
Это, по-видимому, приведет к пустым значениям myDate в нижней части набора результатов. Какова логика того, как это выполняется?
SELECT * FROM myTable
WHERE ...
ORDER BY CASE WHEN myDate IS NULL THEN 1 ELSE 0 END, myDate;
Ответ 1
Это ваш order by:
ORDER BY (CASE WHEN myDate IS NULL THEN 1 ELSE 0 END),
myDate
Первое выражение для порядка: "Дайте значению NULL значение 1 (для сортировки) и не NULL значений значение 0". Ну, вы сортируете в порядке возрастания, поэтому значения NULL продолжаются.
Если вы хотите их сначала, используйте desc:
ORDER BY (CASE WHEN myDate IS NULL THEN 1 ELSE 0 END) DESC,
myDate
Ответ 2
ORDER BY CASE WHEN myDate IS NULL THEN 1 ELSE 0 END, myDate;
Когда myDate равно null, выражение возвращает 1. В противном случае оно вернет 0. 1 больше 0, поэтому при упорядочении по результату этого выражения в порядке возрастания (по умолчанию) значения null перемещаются до конца.