6

我的 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');

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

谢谢。

4

5 回答 5

13
select  *
from    Table1
order by
        abs(now() - date) desc
limit   1
于 2013-05-06T12:23:30.430 回答
6

使用日期差异。它返回两个日期之间的差异。但是,您可以在数据库中包含今天之前和之后的日期。这就是为什么你需要 ABS() 没有它,首先选择最小值,但我们想要最接近 0 的值。即日期差 3 比 -250“大”,但更接近 3 天。这就是您使用绝对值的原因。

SELECT t1.date, t1.personssn 
  FROM Table1 AS t1
 ORDER BY ABS(DATEDIFF(t1.date, NOW())) ASC
 LIMIT 5
于 2013-05-06T12:35:02.633 回答
1

用简单的顺序试试这个:

SELECT date,personssn FROM Table1 ORDER BY date desc
于 2013-05-06T12:26:04.750 回答
1

就像是:

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

但这是 oracle .. 我不确定 mysql 文本。

于 2013-05-06T12:28:22.043 回答
0

使用 MAX(date),如果你只想要一行作为输出,否则使用 date <= sysdate 否则你将如何定义 closet 到 sysdate ..

于 2013-05-06T12:23:58.727 回答