Как сделать множественный выбор с помощью PostgresSQL - PullRequest
1 голос
/ 29 сентября 2019

У меня есть две таблицы: destination и weather_forecast, и я получаю последние прогнозы погоды (заказ по reference_time), например:

SELECT destination_id, reference_time FROM weather_forecast 
WHERE destination_id = (SELECT id FROM destination WHERE slug = 'prague') 
AND reference_time < now()
ORDER BY reference_time DESC
LIMIT 1;

Для слизняков prague (город Прага).

Мне нужно сделать этот запрос для тысячи городов ...

Определенно, не оптимально вызывать это с помощью цикла:

const SLUG_LIST = ['prague', 'new-york', .... next 1000 items]
const weather = db.select...

Есть ли лучший способкак это сделать, используя какой-то оптимальный способ? Некоторые выбирают базу из списка элементов из массива?

Спасибо!

1 Ответ

0 голосов
/ 29 сентября 2019

Вы можете использовать ROW_NUMBER() для ранжирования прогнозов погоды по убыванию reference_time для каждого пункта назначения, а затем отфильтровать самые последние прогнозы:

SELECT *
FROM (
    SELECT 
        d.slug,
        w.destination_id, 
        w.reference_time,
        ROW_NUMBER() OVER(PARTITION BY w.destination_id ORDER BY w.reference_time DESC) rn
    FROM weather_forecast w
    INNER JOIN destination d ON d.id = w.destination_id
    WHERE w.reference_time < now()
) x
WHERE rn = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...