2013-05-06 18 views
5

Ich habe Probleme mit meiner SQL-Abfrage. Ich habe diese Tabelle:SQL - Datum suchen, das dem aktuellen Datum am nächsten ist

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

Das Problem ist, dass ich die personssn auswählen möchten, die ein Datum CLOSEST dem heutigen Datum haben. Ich habe mit "CURDATE()" gearbeitet, kann es aber scheinbar nicht zum Laufen bringen. Wer kann mir in die richtige Richtung helfen?

Danke.

+0

Limit 1, Absolutwert (ABS) und das Datum Differenz von sysdate/CURDATE – xQbert

Antwort

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

sollte Aufsteigend (ab sofort kleinstes Datum Differenz) bestellt wird .Wenn Sie am nächsten kommende Datum wollen schlage ich eine Zugabe where-Klausel Daten in der Vergangenheit zu beseitigen (mit ABS würde ein Datum vor 1 Tag höher als ein Datum in 2 Tagen bestellt werden). – Heyflynn

0

Verwenden MAX (Datum), Wenn u wollen nur eine Zeile als Ausgabe sonst Verwendung Datum < = sysdate sonst wie wird u Schrank definieren sysdate ..

+0

warum negative vote .. – Avi

+0

Wahrscheinlich, weil Sie 'max' nicht verwenden können, um den nächsten Datensatz zu finden, und selbst wenn Sie könnten, wie würden Sie die entsprechende SSN anzeigen? – Andomar

+0

Ich gab nicht die Stimme, aber ich nehme an, dass es war, weil Ihre Methode eine Annahme macht, dass das Datum in der Tabelle nie nach dem aktuellen Datum sein wird und dass die Auswahl mit max nur das späteste Datum im System ohne zurückgibt wie nah es dem aktuellen Datum ist. –

1

dieses Versuchen mit einfachen Auftrag von:

SELECT date,personssn FROM Table1 ORDER BY date desc 
1

Etwas wie:

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 

aber ist Orakel .. Ich bin mir nicht sicher über den MySQL-Text.

5

Verwendung datediff. es ist Rückkehrunterschied zwischen zwei Daten.

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