SELECT DISTINCT
`coin_uuid`,
(
FIRST_VALUE(cmc_rank) OVER (PARTITION BY coin_uuid ORDER BY last_updated DESC)
- FIRST_VALUE(cmc_rank) OVER (PARTITION BY coin_uuid ORDER BY last_updated ASC)
) as rank_change
FROM `coin_quotes`
WHERE `last_updated` BETWEEN '2021-11-03 00:00:00' and '2021-11-04 23:59:59'
ORDER BY rank_change DESC
Что в $message и что по итогу в $encodedKeyboard. Ошибка 400 - это ошибка из телеграм как я понимаю, а не 400 вашего от сервера.
Ну и читайте, что такое ошибка 400 - Bad Request. Что на русском, ошибка запроса - проблема с данными которые вы отправляете, их и проверять нужно, что же вы там отправляете ему. Что в ваших переменных известно только вам, и то не факт ) раз есть вопрос такой )