Cортировка данных по вычислению из другой таблицы и постраничная выдача?

Здравствуйте, есть таблицы:
currency
6183b5bdd041e042761861.png

exchange_rates
6183b5cb4326c768875920.png

Нужно получать курс первого дня, для выбранного периода - first, и последнего дня - last. Чтобы высчитать разницу. После чего {last} - {first} = {Х}. И вот по этому {Х} делать сортировку выборки.

Сейчас у меня разница высчитывается бекендом и просто отображается в соответствующей колонке.

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

Единственное решение что я вижу, это собрать все валюты, сделать вычисления на бекенде, выполнить сортировку и отобразить уже пагинацией то, что мне нужно. Но это работало бы при не большом количестве валют. И не вижу смысла работать с тем, что по итогу не будет отображаться пользователю. Мне кажется это абсолютно не рациональное решение, прошу поделится опытом и советом, как вы делаете такие выборки.

Возможно криво описал задачу, но надеюсь все же, что понятно. Если нужно, готов оплатить ваше время, за разъяснение как с таким работать.
  • Вопрос задан
  • 61 просмотр
Решения вопроса 1
@Akina
Сетевой и системный админ, SQL-программист.
Нужно получать курс первого дня, для выбранного периода - first, и последнего дня - last. Чтобы высчитать разницу. После чего {last} - {first} = {Х}. И вот по этому {Х} делать сортировку выборки.

Да запрос же тривиальный!
SELECT DISTINCT 
       coin_uuid,
       FIRST_VALUE(price) OVER (PARTITION BY coin_uuid ORDER BY last_updated ASC) firstprice,
       FIRST_VALUE(price) OVER (PARTITION BY coin_uuid ORDER BY last_updated DESC) lastprice
FROM exchange_rates
ORDER BY coin_uuid, lastprice - firstprice
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы