我有下表的人和他们的生日:
name birthday ---------------------- yannis 1979-06-29 natalia 1980-08-19 kostas 1983-10-27 christos 1979-07-22 kosmas 1978-04-28
而且我不知道如何根据生日离今天有多近来对名字进行排序。因此,对于NOW()= 2011-09-08,排序结果应为:
kostas 1983-10-27 kosmas 1978-04-28 yannis 1979-06-29 christos 1979-07-22 natalia 1980-08-19
我正在寻找一个快速的技巧,并不真正在意性能(宠物项目-表将容纳少于1000条记录),但是当然每个建议都会受到赞赏。
这是一种方法:
按该日期对结果进行排序
SELECT name, birthday, birthday + INTERVAL (YEAR(CURRENT_DATE) - YEAR(birthday)) YEAR AS currbirthday, birthday + INTERVAL (YEAR(CURRENT_DATE) - YEAR(birthday)) + 1 YEAR AS nextbirthday FROM birthdays ORDER BY CASE WHEN currbirthday >= CURRENT_DATE THEN currbirthday ELSE nextbirthday END
笔记:
SQLFiddle