Задача
Вы хотите произвести упорядочивание по временному значению.
Решение
Сортируйте по столбцу даты или времени, при необходимости игнорируя ненужные составляющие значений.
Обсуждение
Многие сведения включают в себя информацию о дате или времени, и нередко требуется упорядочить результаты в хронологическом порядке. MySQL умеет упорядочивать временные типы, так что не приходится прибегать к каким-то ухищрениям, чтобы отсортировать значения столбцов DATE, DATETIME, TIME или TIMESTAMP. Пусть некоторая таблица содержит столбцы всех этих типов:
mysql> SELECT * FROM temporal_val;
+--------------+--------------------------+------------+---------------------+
| d | dt | t | ts |
+--------------+--------------------------+------------+---------------------+
| 1970-01-01 | 1884-01-01 12:00:00 | 13:00:00 | 19800101020000 |
| 1999-01-01 | 1860-01-01 12:00:00 | 19:00:00 | 20210101030000 |
| 1981-01-01 | 1871-01-01 12:00:00 | 03:00:00 | 19750101040000 |
| 1964-01-01 | 1899-01-01 12:00:00 | 01:00:00 | 19850101050000 |
+--------------+--------------------------+------------+---------------------+
Используем инструкцию ORDER BY для упорядочивания каждого из столбцов в нужном направлении:
mysql> SELECT * FROM temporal_val ORDER BY d;
+--------------+---------------------------+-----------+---------------------+
| d | dt | t | ts |
+--------------+--------------------------+------------+---------------------+
| 1964-01-01 | 1899-01-01 12:00:00 | 01:00:00 | 19850101050000 |
| 1970-01-01 | 1884-01-01 12:00:00 | 13:00:00 | 19800101020000 |
| 1981-01-01 | 1871-01-01 12:00:00 | 03:00:00 | 19750101040000 |
| 1999-01-01 | 1860-01-01 12:00:00 | 19:00:00 | 20210101030000 |
+--------------+--------------------------+------------+---------------------+
mysql> SELECT * FROM temporal_val ORDER BY dt;
+--------------+--------------------------+------------+---------------------+
| d | dt | t | ts |
+--------------+--------------------------+------------+---------------------+
| 1999-01-01 | 1860-01-01 12:00:00 | 19:00:00 | 20210101030000 |
| 1981-01-01 | 1871-01-01 12:00:00 | 03:00:00 | 19750101040000 |
| 1970-01-01 | 1884-01-01 12:00:00 | 13:00:00 | 19800101020000 |
| 1964-01-01 | 1899-01-01 12:00:00 | 01:00:00 | 19850101050000 |
+--------------+--------------------------+------------+---------------------+
mysql> SELECT * FROM temporal_val ORDER BY t;
+--------------+--------------------------+------------+---------------------+
| d | dt | t | ts |
+--------------+--------------------------+------------+---------------------+
| 1964-01-01 | 1899-01-01 12:00:00 | 01:00:00 | 19850101050000 |
| 1981-01-01 | 1871-01-01 12:00:00 | 03:00:00 | 19750101040000 |
| 1970-01-01 | 1884-01-01 12:00:00 | 13:00:00 | 19800101020000 |
| 1999-01-01 | 1860-01-01 12:00:00 | 19:00:00 | 20210101030000 |
+--------------+--------------------------+------------+---------------------+
mysql> SELECT * FROM temporal_val ORDER BY ts;
+--------------+--------------------------+------------+---------------------+
| d | dt | t | ts |
+--------------+--------------------------+------------+---------------------+
| 1981-01-01 | 1871-01-01 12:00:00 | 03:00:00 | 19750101040000 |
| 1970-01-01 | 1884-01-01 12:00:00 | 13:00:00 | 19800101020000 |
| 1964-01-01 | 1899-01-01 12:00:00 | 01:00:00 | 19850101050000 |
| 1999-01-01 | 1860-01-01 12:00:00 | 19:00:00 | 20210101030000 |
+--------------+--------------------------+------------+---------------------+
Иногда сортировка использует только часть даты или времени. В этом случае можно выделить необходимую составляющую (или составляющие) и работать только с ними.