Каким должен быть запрос для сортировки дат?

204
01 августа 2021, 05:30

Как выполнить сортировку дат используя только ORDER BY в следующем порядке:

  • дата в будущем от ближайшей до самой дальней
  • дата в прошлом от ближайшей до самой дальней

На данный момент SQL запрос выглядит так:

SELECT * FROM table
ORDER BY
    CASE WHEN TIMESTAMP(`time`) > TIMESTAMP(CURDATE()) THEN 1 ELSE 0 END DESC,
    CASE WHEN TIMESTAMP(`time`) = TIMESTAMP(CURDATE()) THEN 1 ELSE 0 END DESC,
    CASE WHEN TIMESTAMP(`time`) < TIMESTAMP(CURDATE()) THEN 0 ELSE 1 END DESC, time ASC

Но в прошедших датах порядок получается от самой дальней до самой ближней даты

Answer 1

Навскидку

ORDER BY SIGN(TIMESTAMPDIFF(day, TIMESTAMP(`time`), TIMESTAMP(CURDATE())))
         ,ABS(TIMESTAMPDIFF(day, TIMESTAMP(`time`), TIMESTAMP(CURDATE())))

time - DATETIME – Strange Tin 39 секунд назад

Тогда убрать преобразование в timestamp и использовать DATEDIFF().

fiddle

READ ALSO
Получить данные разных столбцов как один

Получить данные разных столбцов как один

У меня есть таблица, в которой храниться first_id и second_id, это айди пользователей которые между собой дружат, и мне нужно для пользователя по определенному...

128
SQL 5.7 group by по максимальному значению

SQL 5.7 group by по максимальному значению

столкнулся с проблемой при переходе MYSQL 5,6 на 5,7 выборка выбирает не корректно

147
Не работают динамические стили Wordpress

Не работают динамические стили Wordpress

Гружу динамические стили через настройки wordpress, код вывода стилей выглядит так

217