2017-06-02 7 views
0

ich weiß, dass die Frage kann, ist ein Duplikat this, aber wenn ich die Antworten versuchte, sie bieten bekam ich eine andere Antwort ...am nächsten Tag zu aktuellem Datum SQL Get

, so habe ich einen Tisch und heute ist 06/02/2017 tblpres

patID  pres  presDate 
    1  | asd  | 05/29/2017 
    2  | qwe  | 05/20/2017 
    3  | zxc  | 06/01/2017 
    4  | ety  | 05/27/2017 
    5  | ttt  | 05/18/2017 

so habe ich eine Abfrage, um den am nächsten Tag auf das aktuelle Datum zu bekommen, sondern ich bekomme id 3 whch am nächsten Tag auf das aktuelle Datum ist i eine diff Antwort erhalten ..

SELECT pres,presDate 
FROM tblpres 
WHERE patID = '20150518384' 
ORDER BY presDate DESC 
LIMIT 1 

SELECT pres, presDate 
FROM tblpres 
WHERE patID = '20150518384' 
ORDER BY ABS(DATEDIFF(presDate, `06/02/2017`)) 
LIMIT 1 

SELECT pres, presDate 
from tblpres 
WHERE patID = '20150518384' 
order by abs('06/02/2017' - presDate) desc 
limit 1 

SELECT pres,presDate 
FROM tblpres 
WHERE `patID` = '20150518384' AND presDate < '06/02/2017' 
ORDER BY presDate 
LIMIT 1 

dies ist die Abfrage Ich habe versucht, aber nichts scheint zu funktionieren ... ich tun, um eine Antwort auf diese Abfrage erhalten, aber das Ergebnis ist nicht das, was ich erwartet ..

+0

Interessant. Ich bin neugierig, wenn + wählen wo und dann Gruppe von + Max wird schneller als das auf tatsächlichen Systemen? Weil diese beiden komplexitätsmäßig O (n) ergeben, während "Ordnung nach" eine Art ist, die technisch O (nlogn) -ish erfordert? – iehrlich

+0

Einfach Daten als Daten speichern – Strawberry

Antwort

1

Verwendung ISO/ANSI-Standard Datumsformate:

SELECT pres, presDate 
FROM tblpres 
WHERE patID = '20150518384' 
ORDER BY ABS(DATEDIFF(presDate, '2017-06-02')) 
LIMIT 1; 

Oder, noch besser, verwenden CURDATE():

SELECT pres, presDate 
FROM tblpres 
WHERE patID = '20150518384' 
ORDER BY ABS(DATEDIFF(presDate, CURDATE())) 
LIMIT 1; 

Wenn presdate nicht wirklich ein Datum ist, könnte man es zu einem konvertieren müssen:

SELECT pres, presDate 
FROM tblpres 
WHERE patID = '20150518384' 
ORDER BY ABS(DATEDIFF(str_to_date(presDate, '%m/%d/%Y'), CURDATE())) 
LIMIT 1; 
+0

es funktioniert nicht ... das Datum aus meiner Datenbank sieht so aus ... es wird in '% m /% d /% Y' Format umgewandelt .. als ich Ihre Lösung für curdate versuchte ich didn ' t bekomme das nächste Datum zum aktuellen Datum .. auch wenn ich statische Daten für das Datum verwende .. ich habe nicht das nächste bekommen. –

+0

@LionSmith. . . Hast du die dritte Version ausgeführt? –

+0

oh sorry ich habe das nicht gesehen .. lass mich es versuchen .. –

Verwandte Themen