我有一个mysql表employees,其中有一列'Date_of_joining'。我正在尝试获取加入日期最接近当前日期的员工列表
员工:
EmpID Date_of_joining
1 2015-08-30
2 2019-01-15
3 2018-01-11
预期结果(假设当前日期为今天,即2023年1月9日)
EmpID Date_of_joining
3 2018-01-11
2 2019-01-15
1 2015-08-30
我基本上是想找出谁快到他们的工作周年纪念日了。任何线索或帮助都很感激
编辑:
下面的查询工作完全像我想要的,但我也想得到两个日期之间的类似数据,有没有办法实现这一点使用相同的查询或任何调整
SELECT *, (366 + DAYOFYEAR(Date_of_joining ) - DAYOFYEAR(NOW())) % 366 as left_days FROM employees ORDER BY left_days
3条答案
按热度按时间aiqt4smr1#
您希望按即将到来的周年日期对每一行进行计算和排序。这很简单:
(将非闰年的2月29日视为2月28日)
pdsfdshx2#
这里有两个函数可以帮助我们。
DAYOFYEAR(d)
返回日期d
在一年中的第几天。例如,由于Jan有31天,我们期望DAYOFYEAR('2022-02-01')
返回32
。接下来,
CURDATE()
返回今天的日期。加入日期的周年纪念日总是
DAYOFYEAR(Date_of_joining)
,所以从今天到加入日期之间的天数是DAYOFYEAR(CURDATE()) - DAYOFYEAR(Date_of_joining)
,你可以把它添加到where
子句中。jdgnovmf3#
我知道我的答案中的查询是复杂的,但我张贴它无论如何,如果它有助于。
它不仅允许有周年纪念日,而且周年纪念日之前的天数。
另一方面,我不得不复制获得周年纪念日的代码来获得天数,我不知道是否有更好的方法来做到这一点。