2016-05-22 5 views
2

Я хочу написать запрос, который показывает мне малейшую разницу между данным днем ​​месяца и днями в таблицах.mysql: малейшая разница между днями

select * from students where 5 = month(birthdate) 

Я хочу найти студентов, которые родились в мае, и теперь я хочу, чтобы получить малейшее различие между определенный день и в день рождения.

Например:

Алан 1980-05-03 Боб 1978-05-07

И я установить день до 8. Результат должен показать мне Боб. Как должен выглядеть запрос?

ответ

1

Вы могли бы использовать:

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

SqlFiddleDemo

Если сравнить только в одном месяце диапазоне вы можете легко получить разницу между днем ​​в определенный месяц.

Примечание: Это не будет обрабатывать связи.

+0

Да, это не работает. – 1337

+0

@ 1337 См. Обновленный – lad2025

+1

Nice it works thx man :) – 1337

0

Здесь вы задаете день, вы выбираете всех учеников с днем ​​рождения, которые соответствуют дате рождения ближе всего к выбранному вами дню.

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() возвращает день (1-31) месяца за определенную дату.

Смежные вопросы