Mysql
 sql >> база данни >  >> RDS >> Mysql

Имам нужда от необичайно подреждане на mysql резултати

Ето как бих го направил:

SELECT *, (DATE_FORMAT(date, '%j')-DATE_FORMAT(NOW(), '%j')+365)%365 AS d 
FROM foo ORDER BY d;

%j форматът на датата е денят от годината, т.е. число 001...366.

Тествах това върху някои примерни данни и се сортира по начина, който описваш:игнорира годината и сортира следващата дата, която първо пада след текущата дата, след това възходяща и се обвива до дати по-рано през годината.

+----+------------+------+
| id | date       | d    |
+----+------------+------+
|  5 | 1999-05-15 |   27 |
|  6 | 1992-06-15 |   59 |
|  7 | 1990-07-15 |   88 |
|  8 | 1988-08-15 |  120 |
|  9 | 1980-11-15 |  212 |
|  1 | 2010-01-15 |  272 |
|  2 | 2009-02-15 |  303 |
|  3 | 2004-03-15 |  332 |
|  4 | 2002-04-15 |  362 |
+----+------------+------+


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да конвертирате дата и час в UTC в MySQL

  2. MySQL - CONCAT две полета и ги използвайте в клауза WHERE

  3. Добавете префикс към автоматично увеличение в mysql db

  4. Сървърът не отговаря (или сокетът на локалния MySQL сървър не е конфигуриран правилно) в wamp сървър

  5. Изчисляване на времева разлика в MySQL, но отчитане на събития