SQL - 查找与当前日期最近的日期

问题描述:

我遇到了一些SQL查询问题。 我得到这个表:SQL - 查找与当前日期最近的日期

insert into Table1 (date, personssn) 
insert ('2012-01-21 12:01:33', '123456789'); 
insert into Table1 (date, personssn) 
insert ('2012-02-22 12:01:33', '123456789'); 

的问题是,我想选择谁拥有最接近当前日期的日期的personssn。我一直在使用“CURDATE()”,但似乎无法让它工作。任何人都可以帮助我朝正确的方向发展?

谢谢。

+0

限制1,绝对超值(ABS)和SYSDATE的时间差/ CURDATE – xQbert 2013-05-06 12:23:44

select * 
from Table1 
order by 
     abs(now() - date) desc 
limit 1 
+1

要责令升序(从现在最小的时间差)。如果你想接近即将到来的约会,我建议增加一个where子句来消除过去的日期(使用abs会使日期1天前订购的日期高于2天内的日期)。 – Heyflynn 2014-10-13 16:12:10

使用MAX(日期),如果妳希望只有一行作为输出使用其他日期< = SYSDATE 否则U将如何界定衣柜SYSDATE ..

+0

为什么负面投票.. – Avi 2013-05-06 12:25:51

+0

可能是因为您不能使用'max'找到最接近的记录,并且即使您可以,您将如何显示相应的SSN? – Andomar 2013-05-06 12:39:05

+0

我没有给出投票,但我假设这是因为你的方法是假设表中的日期永远不会超过当前日期,并且用max选择只会返回系统中的最新日期而没有考虑它与当前日期有多接近。 – 2013-05-06 12:40:00

通过简单的命令试试这个:

SELECT date,personssn FROM Table1 ORDER BY date desc 

喜欢的东西:

with myCTE as (
SELECT to_date('21-Jan-2012 12:00') as mydate, '123456789' as myId FROM DUAL UNION 
Select to_date('22-Feb-2012 12:00') as mydate, '123456789' FROM DUAL) 
Select abs(sysdate-mydate) as diff, mydate, myID from myCTE order by diff 

但这是甲骨文..我不确定的MySQL文本。

使用datediff。这是两个日期之间的差异。

SELECT date,personssn FROM Table1 ORDER BY ABS(DATEDIFF(DATE, NOW())) LIMIT 5