2013-05-06 16 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

SYSDATE/CURDATE – xQbert

答えて

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

からリミット1、絶対値(ABS)や日付の差は(今から最小の日付の差)を昇順発注する必要がありますが、最も近い今後の日付をしたい.IF私は過去の日付を排除するためにwhere句を追加することをお勧め(absを使用すると、1日前の日付は2日以内の日付よりも高くなります)。 – Heyflynn

0

利用MAX(日付)、uは出力、他の利用日< = SYSDATE として一つだけの行をしたい場合はそうでない場合はどのようにUとしてsysdateするクローゼットを定義します。..

+0

なぜ否定的な表.. – Avi

+0

おそらく最も近いレコードを見つけるために 'max'を使うことはできないでしょうし、もしできたとしても、どのようにして対応するSSNを表示しますか? – Andomar

+0

私は投票しませんでしたが、あなたの方法では、テーブルの日付が現在の日付を過ぎることはないと仮定していて、最大で選択すると、それが現在の日付にどのくらい近いかに関して。 –

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を使用してください。それは2つの日付の間の戻り差です。

SELECT date,personssn FROM Table1 ORDER BY ABS(DATEDIFF(DATE, NOW())) LIMIT 5 
関連する問題