【发布时间】:2014-10-21 22:04:35
【问题描述】:
这是我当前的 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 日(当然是明年):疯狂的麦克斯
【问题讨论】:
-
明年 6 月 5 日将不会被选中,因为它不属于 90 天的限制。