2016-05-22 16 views
2

Ich möchte eine Abfrage schreiben, die mir den geringsten Unterschied zwischen einem bestimmten Tag eines Monats und den Tagen in den Tabellen zeigt.mysql: der geringste Unterschied zwischen den Tagen

select * from students where 5 = month(birthdate) 

Ich möchte für die Schüler suchen, die im Mai geboren wurden und jetzt will ich den geringsten Unterschied zwischen einem bestimmten Tag und dem Tag des Geburtstages bekommen.

Zum Beispiel:

Alan 1980.05.03 Bob 1978-05-07

Und ich den Tag bis 8. Das Ergebnis zeigen sollte mich Bob. Wie sollte die Abfrage aussehen?

Antwort

1

Sie könnten verwenden:

SELECT * 
FROM students 
WHERE month(birthdate) = 5 
ORDER BY ABS(DAY(NOW()) - DAY(birthdate)) 
LIMIT 1; 

SqlFiddleDemo

Wenn Sie nur in einem Monat Bereich vergleichen Sie leicht Unterschied zwischen Tag in bestimmtem Monat bekommen können.

Hinweis: Dies wird nicht mit Bindungen.

+0

Ja, das funktioniert nicht. – 1337

+0

@ 1337 Siehe aktualisiert – lad2025

+1

Schön funktioniert es thx man :) – 1337

0

Hier legen Sie den Tag fest, Sie wählen alle Schüler mit Geburtstag, die dem Geburtsdatum am nächsten zu dem Tag entsprechen, den Sie gewählt haben.

Set @Day = 5; -- your number 
Select * from students 
where month (birthdate)=5 -- set this to month 
Having birthdate = (select min(birthdate) from students order by abs(@Day - dayofmonth(birth date)) desc limit 1); 

Dayofmonth() gibt den Tag (1-31) des Monats für ein bestimmtes Datum zurück.