这是我当前的 SQL 查询,用于获取我们公司未来 90 天内所有即将过生日的员工:
SELECT
user.birthday, user.name, MONTH(user.birthday)
AS month, DAY(user.birthday) AS day
FROM user WHERE
(1 =
(FLOOR(DATEDIFF(DATE_ADD(DATE(NOW()),INTERVAL
90 DAY),birthday) / 365.25)) -
(FLOOR(DATEDIFF(DATE(NOW()),birthday)
/ 365.25)))
ORDER BY MONTH(birthday),DAY(birthday)
问题在于,如果现在是11月,而一些生日是在1月份,它将首先显示1月份的生日,然后是11月和12月,尽管今年已经过了1月份的生日。
是否有一种方法可以在同一个SQL查询中重新排序这些记录,以便首先显示当前和未来的月份,然后再显示明年的月份?
感谢Johan提供的第一个部分解决方案。
ORDER BY ( MONTH(birthday) > MONTH(NOW()
OR ((MONTH(birthday) = MONTH(now())
AND DAY(birthday) >= DAY(NOW()) DESC
, MONTH(birthday), DAY(birthday)
还需要一点改进。如果生日已经过去,它应该显示在12月之后的结果中。假设今天是6月27日,则应该显示以下示例:
- 6月28日:约翰·多
- 12月27日:玛丽·莱特
- 明年6月5日:疯狂的麦克斯