A ideia chave é usar
order by
e limit
:Se você quiser o mais próximo antes:
SELECT one
FROM table
WHERE datetimefield <= '2014-12-10 09:45:00'
ORDER BY datetimefield DESC
LIMIT 1;
Se você quiser o mais próximo, em qualquer direção, use
TIMESTAMPDIFF()
:ORDER BY abs(TIMESTAMPDIFF(second, datetimefield, '2014-12-10 09:45:00'))
LIMIT 1