mysql - 即将到来的生日年错误 (SQL)

标签 mysql sql

这是我当前的 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 查询中重新排序这些记录,以便它首先显示当前和 future 的月份,然后是下一年的月份?

第一个部分解决方案 感谢 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 日:john doe
  • 12 月 27 日:玛丽·赖特
  • 6 月 5 日(当然是明年):疯狂的麦克斯

最佳答案

我不确定,但您的生日似乎包括年份。如果是这样,您将为每个用户设置一个生日范围(每年一个),您可以只选择接下来 90 天内的生日。

SELECT
  user.birthday
  , user.name
  , MONTH(user.birthday) AS month
  , DAY(user.birthday) AS day  
FROM user 
WHERE  birthday BETWEEN NOW() AND DATE_ADD(NOW, INTERVAL 90 DAY)  
ORDER BY Birthday DESC

如果你的生日只有月份和日期,你的查询需要是:

SELECT
  user.birthday
  , user.name
  , MONTH(user.birthday) AS month
  , DAY(user.birthday) AS day  
FROM user 
WHERE STR_TO_DATE(CONCAT(YEAR(NOW()),MONTH(birthday),DAY(birthday)),'%YYYY%M%D')
  BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 90 DAY) OR
STR_TO_DATE(CONCAT(YEAR(DATE_ADD(NOW(),INTERVAL 1 YEAR)),MONTH(birthday),DAY(birthday)),'%YYYY%M%D')
  BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 90 DAY) 
ORDER BY ( MONTH(birthday) > MONTH(NOW() 
           OR ((MONTH(birthday) = MONTH(now()) AND DAY(birthday) >= DAY(NOW()) DESC,
         MONTH(birthday), DAY(birthday)

关于mysql - 即将到来的生日年错误 (SQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6453943/

相关文章:

sql - 将逗号分隔的列数据拆分为其他列

mysql - 是否可以在工作台中编辑查询结果?

c# - 从数据库表中查找数据

php - mysql选择日期之间

php - MySQL 跳过第一行

mysql - SQL 语法错误 db_query

php - 使用 ORDER BY DESC 排名,但更新列

php - 使用自动完成从 mysql 表返回用户 ID

mysql - 如何从一个表中获取出现在另一个表中的值

java - 从数据库更新/查询的正确方法