2013-05-06 148 views
5

我遇到了一些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

回答

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

要責令升序(從現在最小的時間差)。如果你想接近即將到來的約會,我建議增加一個where子句來消除過去的日期(使用abs會使日期1天前訂購的日期高於2天內的日期)。 – Heyflynn 2014-10-13 16:12:10

0

使用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

1

通過簡單的命令試試這個:

SELECT date,personssn FROM Table1 ORDER BY date desc 
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 

但這是甲骨文..我不確定的MySQL文本。

5

使用datediff。這是兩個日期之間的差異。

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