mi pare strano sommare e poi sottrarre lo stesso valore di anno.
Potresti anche fare cosi':
Codice PHP:
SELECT DATE_FORMAT(data_nascita,'%d-%m-%Y') AS nato,
DATEDIFF(
CURDATE(), concat(year(now()), date_format(data_nascita, '-%m-%d'))
) as diff
FROM sql_agenda
WHERE
DATEDIFF(CURDATE(), concat(year(now()), date_format(data_nascita, '-%m-%d'))
) BETWEEN -30 AND 30
ORDER BY diff DESC
nel where non puoi usare l'alias dichiarato nella select perche' il where viene risolto prima dei campi, subito dopo il nome tabella.
In pratica viene fatta una scelta dei record che rispettano la richiesta where, viene composta una tabella temp con solo i record interessati e su questi viene imposta la selezione e l'order by